【问题标题】:How to search word in file that include dollar sign ($) using awk如何使用 awk 在文件中搜索包含美元符号 ($) 的单词
【发布时间】:2020-05-18 17:34:38
【问题描述】:

我想捕捉包含以下模式的行: 单词1,单词2,^word3$,单词4

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

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

这将打印该行,我只是无法用 ^ 和 $ 符号抓取单词。

我该怎么做? (我必须用awk,因为原来的命令比较复杂,不能用grep)

谢谢!

【问题讨论】:

  • 当你的正则表达式中有有趣的字符时,将它们括在方括号中总是安全的:[^]word3[$]
  • 是您从文字字符串"^word3$" 中提取"word3" 的问题吗?

标签: linux awk


【解决方案1】:

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

如果您使用运算符==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

【讨论】:

  • @ניב אדלשטיין :我建议您下次在帖子中包含您的输入示例,以避免试图帮助您的人猜测。
  • 您好,感谢您的回答。对不起,我不太清楚,我的问题不在于“,”分隔符,问题在于 ^ 和 $ 符号,我可以在 awk 语句中捕获它们,它们是特殊符号。当我尝试这样做时: ($3 == "^word3$") 什么也没发生
猜你喜欢
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2017-11-19
  • 1970-01-01
相关资源
最近更新 更多