grep 查找具有特定数据的文字 [方括号]

grep to find literal [square brackets] with specific data

我的文件包含以下几行:

hello_400 [200]
world_678 [201]
this [301]
is [302]
your [200]
friendly_103 [404]
utility [200]
grep [200]

我只查找以 [200] 结尾的行。我确实尝试使用以下模式转义方括号:

并且结果要么包含所有行,要么不包含任何内容。很混乱。

我建议转义 [] 并用单引号引用完整的正则表达式,以防止您的 shell 解释正则表达式。

grep '\[200\]$' file

输出:

hello_400 [200]
your [200]
utility [200]
grep [200]

始终在 shell 中的字符串周围使用引号,除非您出于某种原因(例如文件名扩展)需要删除引号,请参阅 https://mywiki.wooledge.org/Quotes,因此默认情况下使用 grep 'foo' 而不是grep foo。然后你只需要转义字符串中的 [ 正则表达式元字符以使其成为文字,即 grep '\[200]' file.

与其使用 grep 和必须转义正则表达式元字符以使它们表现得像文字,不如使用支持对特定字段进行文字字符串比较的 awk:

$ awk '$NF=="[200]"' file
hello_400 [200]
your [200]
utility [200]
grep [200]

或整行:

$ awk 'index([=11=],"[200]")' file
hello_400 [200]
your [200]
utility [200]
grep [200]