모든 홀수 줄에 나타나는 특정 문자 뒤의 모든 텍스트를 제거합니다.
이것은 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
줄 번호가 홀수인 경우에만 교체를 수행하는 조건을 추가합니다.