shell - AWK 完全匹配方括号内的字符串

标签 shell awk

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

https://www.test.example.com [503]
https://www.tst.example.com [403]
https://www.tt.example.com [302]

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

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

$ awk -F "$2 == '\[403]\'" file.txt
awk: warning: escape sequence `\[' treated as plain `['
awk: warning: escape sequence `\'' treated as plain `''

最佳答案

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

awk '$2 == "[403]"' file.txt

在基本上所有的 Unix shell 中,您使用的双引号不保护美元符号,因此 $2 将被 shell 替换,可能什么都没有,或者用一些不相关的字符串(无论作为第二个命令行参数传递给 shell)。

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

关于shell - AWK 完全匹配方括号内的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65448729/

相关文章:

python - 使用 Python 子进程将 stdout 重定向到 stdin?

awk - 在快速 awk 命令中为每一行分配一个变量

regex - 如何将引号中的多行数据恢复为一行?

c - 从 ELF 二进制文件中仅提取我的函数名称

linux - 如何在 ssh 中显示换行符

bash - 在您的 ~/.bashrc 文件中引用/etc/bashrc 是强制性的还是必需的?

linux - 使用 shell 脚本 ssh 到不同的节点

awk - 从 csv 列中划分数字

linux - 在 shell 变量中提取文件的最后一个和倒数第二个字符串

java - 将参数传递给脚本 - 参数是位于上一个目录的配置文件