쉘 스크립트에서 줄 삭제

쉘 스크립트에서 줄 삭제

나는 이 파일을 가지고 있습니다 :

# more file.txt
 2c2
lns-ld-wall-01-t2 old:261,260
4c4
Prive_ORANGE old:258,259

2c2이 행과 이 행과 같은 행을 모두 삭제해야 합니다 4c4. 쉘 스크립트에서 이 작업을 어떻게 수행할 수 있습니까?

답변1

이것은 작동합니다:

sed 's/.*[0-9]c[0-9].*//g' file.txt

그러나 주석에서 언급했듯이 위 명령은 전체 줄을 삭제하지 않으므로 d일치하는 줄에 이 명령을 사용하는 것이 더 나은 접근 방식입니다.

sed '/[0-9]c[0-9]/d' file.txt

또는 GNU의 확장 정규식 sed( -EBSD* 호환성을 위해 선호되는 플래그 sed)을 사용하십시오.

sed -E '/^[[:blank:]]*[0-9]+[a-z]+[0-9]/d' file

답변2

grep(그리고/ egrep또는 현대의 등가물 grep -E)은 당신의 친구입니다:

man grep

옵션을 봅니다 -v.

여기:

grep -Exv '[[:blank:]]*[0-9]+c[0-9]+[[:blank:]]*' file

c소수점 숫자와 선택적 공백으로 둘러싸인 줄은 필터링됩니다 .

답변3

펄 접근 방식을 취하십시오.

시험:

perl -ne 's/^\s*[0-9]+c[0-9]+$//g; if ($_ !~ /^$/) {print }' file.txt

파일 변경 file.txt:

perl -ne 's/^\s*[0-9]+c[0-9]+$//g; if ($_ !~ /^$/) {print }' -i file.txt

관련 정보