
私はこのファイルを持っています:
# 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のアプローチを取る。
テスト:
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