たとえば、重複するエントリが含まれていない、次のような内容のファイル:
100
10012
12345
12387
123
123456344
100
上記のファイルでandを検索し12345
、パターンが一致する場合はその行を削除したいと思います。
また、これを単一のコマンドで実行したいと考えています。
私は単にするだろう
egrep -v '^(100|12345)$' file.in > file.out
または、sed
sed -n '/^\(100\|12345\)$/!p' file.in > file.out
2 番目のファイルも必要ありません。
sed -ni '/^\(100\|12345\)$/!p' file.in
(コメントを参照してください。厳密に言えば、入力ファイルを置き換える一時ファイルが作成されますが、これはユーザーに対して透過的です)
ご覧のとおり、正規表現は多かれ少なかれ同じままです (egrep で ()| をエスケープする必要がないことを除いて)。1 行に複数の単語があり、単語全体のみを一致させたい場合は、次の sed 正規表現を使用できます。
sed -n '/\<\(100\|12345\)\>/!p' file.in > file.out
これは行100
に一致しますが、一致123 100 123
しません123 100123
。
で同じ動作を得るには、オプションgrep
を使用し-w
ます (thanks Janito):
egrep -wv '(100|12345)' file.in > file.out
sed '/\(100\|12345\)/d' file.txt
数字が正確に一致する必要がある場合は、次のような拡張 grep パターンを使用できます。
grep -v -E '^(100|12345)$' inputfile
これは、 100 または 12345 ではないすべての行を出力することを意味します。番号が行の先頭でのみ一致する必要がある場合は、次を使用します
grep -v -E '^(100|12345)' inputfile
どこでも一致する場合は、使用します
grep -v -E '(100|12345)' inputfile
を使用した片道sed
:
sed '/^\(100\|12345\)$/d' file.txt
結果:
10012
12387
123
123456344