我的文件包含以下几行:
hello_400 [200]
world_678 [201]
this [301]
is [302]
your [200]
friendly_103 [404]
utility [200]
grep [200]
我只是在寻找以 . 结尾的行[200]
。我确实尝试使用以下模式转义方括号:
cat file | grep \[200\]
cat file | grep \\[200\\]$
结果要么包含所有行,要么不包含任何内容。这很令人困惑。
我建议转义[
并]
用单引号引用完整的正则表达式,以防止您的外壳解释正则表达式。
grep '\[200\]$' file
输出:
你好_400 [200] 你的 [200] 实用程序 [200] grep [200]
除非您出于某种原因需要删除引号(例如文件名扩展),否则请始终在 shell 中的字符串周围使用引号(例如文件名扩展),请参阅https://mywiki.wooledge.org/Quotes,因此默认情况下使用 dogrep 'foo'
而不是grep foo
. 然后,您只需转义字符串中的正则[
表达式元字符以使其成为文字,即grep '\[200]' file
.
而不是使用 grep 并且必须转义正则表达式元字符以使它们表现为文字,只需使用支持特定字段上的文字字符串比较的 awk :
$ awk '$NF=="[200]"' file
hello_400 [200]
your [200]
utility [200]
grep [200]
或全线:
$ awk 'index($0,"[200]")' file
hello_400 [200]
your [200]
utility [200]
grep [200]