私はこれらを持っています:
$ cat a.tmp
ABB.log
ABB.log.122
ABB.log.123
ABB.logと完全に一致するものを見つけたかった。
しかし、私がやったとき
$ grep -w ABB.log a.tmp
ABB.log
ABB.log.122
ABB.log.123
すべて表示されます。
Grepを使用して必要なものを取得できますか?
正規表現のアンカーを指定するだけです。
grep '^ABB\.log$' a.tmp
grep -Fx ABB.log a.tmp
Grepのmanページから:
-F、--fixed-strings
PATTERNを固定文字列(リスト)として解釈する
-x、--line-regexp
行全体に完全に一致する一致のみを選択します。
アンカーを使用するのが最善の方法ですが、ここで私がやっていることです:
grep -w "ABB.log " a.tmp
同様にawkで
awk '/^ABB\.log$/' file
ファイルが手動で編集されている場合に重要になる、先頭または末尾のスペースが1つしかない場合、ほとんどの提案は失敗します。これにより、その場合は影響を受けにくくなります。
grep '^[[:blank:]]*ABB\.log[[:blank:]]*$' a.tmp
Shellの単純なwhile-readループは、これを暗黙的に行います。
while read file
do
case $file in
(ABB.log) printf "%s\n" "$file"
esac
done < a.tmp
同様のことをしようとすると、これはうまくいきました:
grep -F ABB.log a.tmp