【问题标题】:Ignore characters in between quotes grep忽略引号之间的字符 grep
【发布时间】:2016-07-13 01:14:03
【问题描述】:

我正在尝试编写一个简单的脚本,它将查找目录中的所有 java 文件并显示与某个搜索字符串匹配的所有日志消息。例如,如果 java 文件中的一行包含“log.info”,我想将它粘贴到文件中。 “错误”、“警告”和“调试”也是如此。现在这就是我所拥有的:

grep -rn --include \*.java "\b\.error\b" * >> log_strings.csv

然后我手动将“.error”替换为其他字符串之一。但是,当我稍后尝试分隔输出时,grep 在字段之间添加冒号“:”字符,并且一些日志消息还包含“:”字符,因此我的输出变得混乱。我最终得到:

filename:line_num:log.debug("some message:"+whatever());

大致翻译为:

filename **TAB** line_num **TAB** log.debug("some message **TAB** "+whatever());

有没有办法替换 grep 产生的“:”字符,但忽略字符串中的那个,以便我的 java 字符串保持井井有条?我想一定有一些事情可以使用 sed 或 awk 来完成。

【问题讨论】:

    标签: regex bash awk sed grep


    【解决方案1】:

    如果你想用制表符替换前两个冒号,只需将一个冒号替换两次:

    sed 's/:/\t/;s/:/\t/;'
    

    在 Perl 中,您可以通过循环运行来避免重复替换:

    perl -pe 's/:/\t/ while ++$x % 3'
    

    【讨论】:

      猜你喜欢
      • 2012-09-05
      • 1970-01-01
      • 2014-02-16
      • 2012-10-31
      • 2016-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多