シェルスクリプトから行を削除する

シェルスクリプトから行を削除する

私はこのファイルを持っています:

# 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のアプローチを取る。

テスト:

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

関連情報