나는 이 파일을 가지고 있습니다 :
# 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
( -E
BSD* 호환성을 위해 선호되는 플래그 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