3

たとえば、重複するエントリが含まれていない、次のような内容のファイル:

100
10012
12345
12387
123
123456344

100上記のファイルでandを検索し12345、パターンが一致する場合はその行を削除したいと思います。

また、これを単一のコマンドで実行したいと考えています。

4

4 に答える 4

7

私は単にするだろう

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
于 2012-10-15T11:35:11.920 に答える
2
sed '/\(100\|12345\)/d' file.txt
于 2014-04-23T14:54:36.213 に答える
1

数字が正確に一致する必要がある場合は、次のような拡張 grep パターンを使用できます。

 grep -v -E '^(100|12345)$' inputfile

これは、 100 または 12345 ではないすべての行を出力することを意味します。番号が行の先頭でのみ一致する必要がある場合は、次を使用します

 grep -v -E '^(100|12345)' inputfile

どこでも一致する場合は、使用します

 grep -v -E '(100|12345)' inputfile
于 2012-10-15T11:41:30.450 に答える
1

を使用した片道sed

sed '/^\(100\|12345\)$/d' file.txt 

結果:

10012
12387
123
123456344
于 2012-10-15T12:00:58.673 に答える