다음과 같은 크리켓 리뷰가 있습니다.
0.3
Richardson to RG Sharma, 2 runs, gentle, non-swinging length ball on off, Rohit seeks to pick it up. Hit high on the bat and spooned over the returning Mitch Marsh at midwicket
0.4
Richardson to RG Sharma, 1 run, banged in short, controlled pull to long leg
내가하고 싶은 것은 n.n
줄 바꿈을 공백으로 바꾸는 다음 줄과 연결하는 것입니다. 그런 다음 두 번째 쉼표부터 각 줄 끝까지 모든 내용을 제거하려고 하므로 위 입력의 출력은 다음과 같아야 합니다.
0.3 Richardson to RG Sharma, 2 runs
0.4 Richardson to RG Sharma, 1 run
-- 편집 -- 개행 문자를 일치시키기 위해 [0-9]"\n"[AZ]를 사용했지만 일치하는 정확한 숫자와 문자를 재현할 수 없습니다. 또한 쉼표 2개 이후의 모든 내용을 제거하기 위해 매개변수 확장을 시도했지만 쉼표 1개 이후에만 제거할 수 있습니다.
답변1
당신은 그것을 사용할 수 있습니다 sed
:
sed -ne '/^[0-9][0-9]*\.[0-6]/ { N; s/\n/ /; s/^\([^,]*,[^,]*\),.*$/\1/; p; }' < data
요청하지 않는 한 이름이 지정된 파일을 처리합니다 data
(-n
) 따옴표로 묶은 sed 프로그램을 실행합니다.
프로그램은 .
하나 이상의 숫자 a와 숫자 0-6으로 시작하는 행을 선택한 다음 해당 행에 대한 구성 요소를 실행합니다 {}
. 이것N
주문하다또한 사이에 개행문자를 넣어서 다음 줄을 읽어보세요. 첫 번째는 s///
개행 문자를 공백으로 바꿉니다.
두 번째는 새 단일 줄을 두 번째 쉼표까지 일치시키고 전체 줄을 첫 번째 부분으로 바꿉니다. 쉼표가 아닌 문자로 구성된 문자열, 쉼표 및 기타 쉼표가 아닌 문자로 구성된 문자열과 그 뒤에 쉼표와 줄 끝에 있는 텍스트가 포함된 \(
그룹을 캡처합니다 .\)
.*
$
결승p
인쇄결과 라인을 출력합니다. 다른 모든 입력 라인은 무시됩니다.
답변2
AWK의 대체 솔루션:
awk -v FS="," '/^[0-9]/{line=$0;getline; line=line" "$1", "$2 ;print line}' file