【问题标题】:Match exact string inside square brackets - printed in colours匹配方括号内的确切字符串 - 以颜色打印
【发布时间】:2020-12-27 11:53:59
【问题描述】:

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

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

下面给出的 awk 命令给了我一个空白输出。
awk '$2 == "[403]"' file.txt

后来我使用 nano 编辑器检查了文本文件,并验证了第二列中的内容。括号内的文字有颜色代码。

https://www.test.example.com [^[[0;31m503^[[0m]
https://www.tst.example.com [^[[0;31m403^[[0m]
https://www.tt.example.com [^[[0;31m302^[[0m]

我还尝试了awk '$2 == "[^[[0;31m503^[[0m]"' file.txt,它给出了一个空白输出。

如何使用 grep 或 awk 执行此操作?

【问题讨论】:

  • 你为什么首先将带有颜色代码的输出保存到文件中?
  • “与第二列匹配的行”是什么意思。您是否对其中包含 403 错误的行感兴趣 - 即匹配“[403]”的行?
  • @oguzismail 这是来自另一个脚本的输出文件
  • @costaparas - 是的,这正是我想要的
  • @JoelDeleep 因为这些颜色代码会给您带来问题,为什么不直接删除它们呢?从您发布的示例输入来看,您只需要awk 'match($2,/[0-9]{3}/){$2="["substr($2,1,3)"]"}1'sed 's/\(.* \).*\([0-9]\{3\}\).*/\1[\2]/'

标签: shell awk


【解决方案1】:
awk 'index($2, "403") {print $1}' file.txt

上面的代码应该对你的示例输入做你想做的事情。

我曾尝试使用某些工具从文件中删除颜色代码。或者指示生成该输出的程序不生成彩色输出。

【讨论】:

  • 那是紧凑的解决方案。这是最初完成的,再次生成文件需要更多时间,但下次会禁用颜色。
  • @Joel 以防万一,nano 将\033 显示为^[[;所以awk '$2 == "[\0330;31m503\0330m]" { print $1 }' file 如果您出于某种原因需要完整地测试该字段,也可以使用。
【解决方案2】:

我尝试了awk '$2 == "[^[[0;31m503^[[0m]"' file.txt,它确实给了我正确的输出 (https://www.test.example.com [^[[0;31m503^[[0m]),也许你还做了其他事情?

如果你的文件很短并且你的链接不包含数字,grep -n 503 file.txt 也更简单。

还有grep -nF "[^[[0;31m503^[[0m]" file.txt,用“n”表示行号,用“F”表示忽略特殊字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 2021-12-11
    相关资源
    最近更新 更多