0

リスト内の単語を含むテキスト内の行を削除しようとしていました。例えば:

ファイル 1:

xxx yyy, zzz,
aaa bbb, sss,
ccc fff, zzz,
rrr www, qasd,

ファイル 2:

xxx
zzz
rrr

ターゲットは、file2 の単語を含む file1 の行を削除することです。したがって、出力は次のようになります。

aaa bbb, sss,  

sed '/zzz/d' のように、単一の単語で sed を使用して zzz を含む行を削除する方法を知っています。しかし、複数の単語、またはファイル内の単語でどのように機能するのでしょうか?

4

2 に答える 2

2

これは次の方法で簡単に実行できますgrep

$ grep -Fwvf file2 file1
aaa bbb, sss,

オプション:

-f ファイル、 --file=ファイル

FILE からパターンを 1 行に 1 つずつ取得します。空のファイルにはパターンが含まれていないため、何にも一致しません。(-f は POSIX で指定されています。)

-v, --invert-match

一致の意味を反転して、一致しない行を選択します。(-v は POSIX で指定されています。)

-w, --word-正規表現

単語全体を形成する一致を含む行のみを選択します。テストは、一致する部分文字列が行の先頭にあるか、単語以外の構成文字が前にある必要があることです。同様に、それは行末にあるか、単語以外の構成文字が後に続く必要があります。単語構成文字は、文字、数字、およびアンダースコアです。

-F, --固定文字列

PATTERN を改行で区切られた固定文字列のリストとして解釈し、そのいずれかが一致するようにします。(-F は POSIX で指定されています。)

変更を に戻すにはfile1:

$ grep -Fwvf file2 file1 > tmp && mv tmp file1
于 2013-03-14T11:08:01.107 に答える
1

これを試して:

grep -vFwf file2 file1
于 2013-03-14T11:10:09.327 に答える