回答:
単に正規表現アンカーを指定します。
grep '^ABB\.log$' a.tmp
sed -r "s/^(.*)$/^\1$/" patterns.txt | egrep -f - a.tmp
grep -Fx ABB.log a.tmp
grepのmanページから:
-F、--fixed-strings
PATTERNを固定文字列(のリスト)として解釈します
-x、--line-regexp
行全体と完全に一致する一致のみを選択します。
-F
?あなたはSolarisを使っていますか?使用する場合/usr/xpg4/bin/grep
grep
bashスクリプト内を使用しており、このオプションは、受け入れられた回答で提案されている正規表現を使用するよりも優れています。検索している変数内に特殊文字(のように.
)があり、コマンドを使用するときにエスケープする必要がないためです。
アンカーを使用するのが最善の方法ですが、ここに私がやっていることがあります:
grep -w "ABB.log " a.tmp
ABB.log
にスペースが必要ですが、これは一般的なケースではありません。つまり、ほとんどの場合失敗します。
awkと同様に
awk '/^ABB\.log$/' file
OPの試みやその他の答えについても説明を加えたいと思います。
次のようなJohn Kugelmansのソリューションも使用できます。
grep -x "ABB\.log" a.tmp
文字列を引用してドット(.
)をエスケープすると、-F
フラグが不要になります。
.
(ドット)をエスケープするか(エスケープされていない場合は(だけでなく)すべての文字に一致するため.
)-F
、grepでフラグを使用する必要があります。-F
フラグはそれを固定文字列にします(正規表現ではありません)。
文字列を引用符で囲まない場合、ドット(.
)をエスケープするために二重のバックスラッシュが必要になることがあります。
grep -x ABB\\.log a.tmp
$ echo "ABBElog"|grep -x ABB.log
ABBElog #matched !!!
$ echo "ABBElog"|grep -x "ABB\.log"
#returns empty string, no match
-x
行全体と一致するように強制します。.
なしの非エスケープを使用した回答-F
は間違っています。-x
パターン文字列を^
とでラップすることで、スイッチを回避できます$
。この場合、メイクには必ずでは使用しない-F
エスケープ代わりに、.
ので、-F
の正規表現の解釈を防ぐことができます^
し、$
。で始まる文字列を照合する-
場合は--
、grep を使用する必要があります。以下--
は何でも入力として扱われます(オプションではありません)。
例:
echo -f |grep -- "-f" # where grep "-f" will show error
echo -f |grep -F -- "-f" # whre grep -F "-f" will show error
grep "pat" -- "-file" # grep "pat" "-file" won't work. -file is the filename
-F
いれば必要ない理由を説明しました.
。
-F
ています。これを書いたときに利用できましたか?そうでない場合、どのシステムを使用していましたか?これまでのところ、回答にその情報が見つかりませんでした。今でも、もう一度読んでみます。確かに、私はあなたの答えを少なくとも2回は完全に読みました。;)
-F
利用できました。(私は言いました: "または-F
フラグと一緒にgrep
"を使用してください)
-F
ています。答えが正解である場合、なぜ脱出する必要があるのでしょうか。それについてどう思いますか?
これは私に似たようなことをしようとしたときにうまくいきました:
grep -F ABB.log a.tmp
$ cat venky
ABB.log
ABB.log.122
ABB.log.123
$ cat venky | grep "ABB.log" | grep -v "ABB.log\."
ABB.log
$
$ cat venky | grep "ABB.log.122" | grep -v "ABB.log.122\."
ABB.log.122
$
私のために働く:
grep "\bsearch_word\b" text_file > output.txt
\b
境界を示し/設定します。
かなり速く動作するようです
search_word
、単語の境界で区切られている行にも一致します。たとえば、「foo search_word bar」という行と一致します。
これはHPUXの場合であり、ファイルのコンテンツに単語間にスペースがある場合は、次のように使用します。
egrep "[[:space:]]ABC\.log[[:space:]]" a.tmp
私はこの機能が必要でしたが、ABB.logの前にプレフィックスが付いた行を返さないようにしたかったのです。
grep "\WABB.log$" -w a.tmp
\W
、空白以外の文字であるリーディングが満たされている場合にのみ一致しxABBxlog
ます。