首页 > 解决方案 > 如何使用 awk 在文件中搜索包含美元符号 ($) 的单词

问题描述

我想捕捉包含以下模式的行:word1、word2、^word3$、word4

我想检查该行中的第三个单词是否等于 word3,^ 和 $ 符号总是使用 awk 在第三列中。像这样的东西:

less file.txt | awk '{if ($3=="^word3$") {print $0}}' 

这将打印该行,我只是不能用 ^ 和 $ 符号抓住这个词。

我该怎么做?(我必须使用awk,因为原始命令更复杂,我不能使用grep)

谢谢!

标签: linuxawk

解决方案


已编辑:输入的单词由空格和逗号分隔。所以awk命令需要这个-F ", "选项。

如果使用 operator ==awk将执行完全匹配。如果要使用正则表达式,则必须使用~运算符。所以你有两个解决方案:

完全符合:

awk -F ", " '($3 == "word3") {print}' file.txt

正则表达式:

awk -F ", " '($3 ~ "^word3$") {print}' file.txt

由于{print}是默认执行的指令,您甚至可以删除该部分并仅发出:

awk -F ", " '($3 ~ "^word3$")' file.txt

但是,如果我一遍又一遍地阅读您的问题,我开始认为您想^word3$从文本中提取内容。在这种情况下,您需要的是:

awk -F ", " '($3 == "^word3$")' file.txt

(在这种情况下没有方括号,正如某处所建议的那样)。

不重新定义字段分隔符的等效解决方案是将逗号放在您尝试匹配的字符串内:

awk '($3 == "^word3$,")' file.txt

推荐阅读