使用“:”作为字段分隔符将 grep 结果通过管道传输到 awk

使用“:”作为字段分隔符将 grep 结果通过管道传输到 awk

我想过滤 grep 命令的结果,例如:

myRepo/path/to/my/file.php:123:                             error_log(' - myError');

如果我执行以下操作,它就会有效。

回显“ myRepo/path/to/my/file.php:123: error_log(' - myError');” | awk -F': ' '{print $1}'

但是当它是 grep 命令的结果时,它会输出整行,为什么?

grep -rn “myError”| awk -F':' '{print $1}'

我有 CentOS 6,带有 Awk 3.1.7、bash 4.1.2

答案1

您的 awk 分隔符是 : 和空格,但我猜测您的代码使用制表符进行缩进(因此不仅在空格上匹配)。

您可以尝试将 grep 更改为以下内容(这会导致 awk 匹配 : 和制表符)。

grep -rn "myError"|awk -F':\t' '{ print $1 }'

这对我使用 slackware linux 上的 bash 4.3.46 和 awk 4.1.3 有效。

答案2

尝试这个:

grep -rn “myError” | awk -F':[ \t]*' '{print $1}'

相关内容