2

これを行うためにsedを使用したいと思います。私は2つのファイルを持っています:

keys.txt:
host1
host2

test.txt
host1 abc
host2 cdf
host3 abaasdf

sed を使用して、keys.txt のキーワードを含む test.txt の行を削除したいと考えています。したがって、test.txt の結果は次のようになります。

host3 abaasdf

誰かがsedでそれを行う方法を教えてもらえますか?

ありがとう、

4

3 に答える 3

2

これに使用することをお勧めしgrepます(特にfgrep、正規表現が含まれていないため)。

fgrep -v -f keys.txt test.txt 

うまくいきます。これsedはすぐに機能します:

sed -i.ORIGKEYS.txt ^-e 's_^_/_' -e 's_$_/d_' keys.txt
sed -f keys.txt test.txt

(これにより、元keys.txtの場所が (バックアップを使用して) ソース可能な sed スクリプトに変更されます。)

于 2012-09-26T18:35:17.800 に答える
2

fgrep -v -fが最善の解決策です。いくつかの代替手段を次に示します。

commとの組み合わせjoin

comm -13 <(join keys.txt test.txt) test.txt

または awk

awk 'NR==FNR {key[$1]; next} $1 in key {next} 1' keys.txt test.txt
于 2012-09-26T20:25:55.817 に答える
0

これはうまくいくかもしれません(GNU sed):

sed 's|.*|/^&\\>/d|' keys.txt | sed -f - test.txt
于 2012-09-26T22:06:20.900 に答える