AWK 匹配方括号内的精确字符串

Joe*_*eep 2 shell awk

我有一个类似于下图所示数据的文件。

https://www.test.example.com [503]
https://www.tst.example.com [403]
https://www.tt.example.com [302]
Run Code Online (Sandbox Code Playgroud)

我想获取与第二列匹配的行。例如,匹配 [403] 的行应该只打印https://www.tst.example.com.

我尝试使用以下命令转义方括号,这给了我警告。

https://www.test.example.com [503]
https://www.tst.example.com [403]
https://www.tt.example.com [302]
Run Code Online (Sandbox Code Playgroud)

tri*_*eee 5

您正在混合正则表达式和纯字符串。[是一个正则表达式特殊字符,但你在这里没有使用正则表达式,只是一个文字字符串比较。您根本不需要任何转义(尽管为了简单起见,您可能希望颠倒单引号和双引号的使用,除非您实际使用的是 Windows)。

awk '$2 == "[403]"' file.txt
Run Code Online (Sandbox Code Playgroud)

在基本上所有的 Unix shell 中,你使用的双引号不保护美元符号,所以$2会被 shell 替换,可能什么都不用,或者用一些不相关的字符串(任何作为第二个命令行参数传入的贝壳)。

-F选项(如果存在)需要一个参数;但根据您的示例数据,默认字段分隔符 - 任何空格序列 - 应该可以正常工作。如果您想将其强制为单个空格,请尝试-F ' '.