홀수 줄에 나타나는 특정 문자 뒤의 모든 텍스트 제거

홀수 줄에 나타나는 특정 문자 뒤의 모든 텍스트 제거

모든 홀수 줄에 나타나는 특정 문자 뒤의 모든 텍스트를 제거합니다.

이것은 sed 파일의 모든 줄에서 작동합니다.

sed 's/;.*//' 

모든 홀수 줄만 처리하도록 이 sed 줄을 어떻게 편집할 수 있나요?

답변1

GNU 사용 sed:

$ sed '1~2s/;.*//' file

주소 범위는 1~2라인 1과 일치하고 그 다음에는 다른 모든 라인과 일치합니다. 일반적인 경우는 first~step매뉴얼의 예제가 sed -n 1~2p모든 홀수 행을 인쇄한다는 것입니다.

이것은 GNU 확장입니다.

다음의 해당 콘텐츠 awk:

$ awk 'NR % 2 { sub(";.*", "") } { print }' file

또는 Arrow가 의견에서 제안한 대로:

$ awk -F';' 'NR % 2 { $0 = $1 } { print }' file

동일한 효과가 있지만 첫 번째 항목 이후의 모든 내용을 명시적으로 바꾸는 대신 필드 구분 기호로 사용됩니다( ;필드 사용).;-F';'

답변2

이 기능은 모든 sed버전 에서 작동할 수 있지만 GNU sed테스트되었습니다.

$ cat ip.txt 
foo;bar-baz;xyz
a;b;c
good bad. hi there
d;e
cool;hot;normal

$ sed 's/;.*//;n' ip.txt 
foo
a;b;c
good bad. hi there
d;e
cool

n명령은 다음 줄을 가져오지만 아무 것도 변경하지 않습니다. 실제로 홀수 줄만 변경할 수 있습니다.


그리고perl

perl -pe 's/;.*// if $.%2' ip.txt

여기서 if $.%2줄 번호가 홀수인 경우에만 교체를 수행하는 조건을 추가합니다.

관련 정보