私は何かが必要です:
grep ^"unwanted_Word"XXXXXXXX
Grepの-v
オプションを使ってそれを行うこともできます。
grep -v "unwanted_Word" file | grep XXXXXXXX
grep -v "unwanted_Word" file
はunwanted_Word
を持つ行をフィルター処理し、grep XXXXXXXX
はパターンXXXXXXXX
を持つ行のみをリストします。
編集:
あなたのコメントから、unwanted_Word
を付けずにすべての行をリストしたいようです。その場合あなたが必要とするすべては:
grep -v 'unwanted_Word' file
私は質問を「どのようにしてWordにマッチさせるが他のものを除外する」として理解しました。そのための1つの解決策は2つの連続したgrepです。
grep "Word1" | grep -v "Word2"
私の場合は、 "plot"と "#plot"を区別する必要がありますが、grepの "Word"オプションではできません( "#"は英数字ではありません)。
お役に立てれば。
あなたのgrep
が-P
オプションでPerlの正規表現をサポートしているならば、あなたはすることができます(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
$
適切な解決策は、awk
と同等のgrep -v "Word" file
を使用することです。
awk '!/Word/' file
しかし、XXX
を出現させ、YYY
not を出現させるなど、もっと複雑な状況が発生する可能性がある場合は、awk
をいくつかgrep
をパイプ処理する代わりに使用すると便利です。
awk '/XXX/ && !/YYY/' file
# ^^^^^ ^^^^^^
# I want it |
# I don't want it
もっと複雑なことも言えます。たとえば、XXX
またはYYY
のいずれかを含み、ZZZ
を含まない行が必要です。
awk '(/XXX/ || /YYY/) && !/ZZZ/' file
等.
Grep -vを使用して一致を反転します。
grep -v "unwanted Word" file pattern
grepは、一致しない行を選択するための '-v'または '--invert-match'オプションを提供します。
例えば.
grep -v 'unwanted_pattern' file_name
これにより、ファイル 'ファイル名'からすべての行が出力されます。ファイル ''不要なパターン 'はありません。
フォルダ内の複数のファイルでパターンを検索している場合は、次のように再帰検索オプションを使用できます。
grep -r 'wanted_pattern' * | grep -v 'unwanted_pattern'
ここでgrepは現在のディレクトリの中からすべてのファイルの中の全ての出現した 'wanted_pattern'をリストし、それを2番目のgrepに渡して 'unwanted_pattern'を除外しようとします。 '|' - pipeは、左のプログラムの標準出力(grep -r 'wanted_pattern' *)を右のプログラムの標準入力(grep -v 'unwanted_pattern')に接続するようにShellに指示します。
-v
オプションは、パターンと一致しないすべての行を表示します。
grep -v ^unwanted_Word