のようなものが必要です。
grep ^"unwanted_word"XXXXXXXX
また、grep as の -v
(--invert-match
のための) オプションを使うこともできます。
grep -v "unwanted_word" file | grep XXXXXXXX
ファイルは
unwanted_wordを持つ行をフィルタリングし、
grep XXXXXXXXは
XXXXXXXXのパターンを持つ行のみをリストアップします。 file
はunwanted_word
を持つ行をフィルタリングし、grep XXXXXXXXXX
はパターンXXXXXXXX
を持つ行のみをリストアップします。
EDIT:EDIT:。
コメントを見る限り、unwanted_word
を持たない行を全てリストアップしたいように見えます。
その場合に必要なのは
grep -v 'unwanted_word' file
私は"How do I match a word but exclude another"のように質問を理解したが、1つの解決策は、シリーズで2つのgrepであるため、除外します。 1つ目のgrepは欲しい"word1"を見つける、2つ目のgrepは"word2"を除外します。
grep "word1" | grep -v "word2"
私の場合は 私は"plot".を区別する必要があります。 と"#plot". と区別する必要があります。 オプションがしてくれません("#". 英数字ではありません)。)
これが役立つことを願っています。
もし、grep
がPerlの正規表現を-P
オプションでサポートしていれば、それが可能です(bashの場合、tcshの場合は!
をエスケープする必要があります)。
grep -P '(?!.*unwanted_word)keyword' file
デモです。
$ cat file
foo1
foo2
foo3
foo4
bar
baz
それでは、foo3
を除くすべての foo
をリストアップしてみましょう。
$ grep -P '(?!.*foo3)foo' file
foo1
foo2
foo4
$
正しい解決策は、grep -v "word".file
を使用することです。
fileを使用し、それと同等の
awk` を使用するのが正解です。
awk '!/word/' file
しかし、XXX
を出現させたい、YYY
を出現させたくないというような、より複雑な状況に陥った場合には、awk
は複数の grep
をパイピングする代わりに便利です。
awk '/XXX/ && !/YYY/' file
# ^^^^^ ^^^^^^
# I want it |
# I don't want it
もっと複雑なことを言うこともできます。
例えば
XXXかYYY
を含む行は欲しいが、ZZZ`を含まないようにしたい。
awk '(/XXX/ || /YYY/) && !/ZZZ/' file
等
grepは '-v'. または '--invert-match'. オプションを使用して、一致しない行を選択することができます。
例えば、以下のようになります。
grep -v 'unwanted_pattern' file_name
これは、ファイル名に 'unanted_pattern' が存在しないファイルから全ての行を出力します。
フォルダ内の複数のファイルからパターンを検索している場合は、以下のように再帰検索オプションを使用することができます。
grep -r 'wanted_pattern' * | grep -v 'unwanted_pattern'
ここでgrepは、現在のディレクトリ内の全てのファイルにある 'wanted_patternལの全ての出現をリストアップしようとします。 をカレントディレクトリ内の全てのファイルに出現しているものをリストアップし、それを2番目のgrepに渡して、 'unanted_pattern'をフィルタリングします。 '|'