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]
结尾的行。我确实尝试使用以下模式转义方括号:
cat file | grep \[200\]
cat file | grep \[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]
我的文件包含以下几行:
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\]$
并且结果要么包含所有行,要么不包含任何内容。很混乱。
我建议转义 [
和 ]
并用单引号引用完整的正则表达式,以防止您的 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]