将grep结果用“:”作为字段分隔符来awk

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

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

如果我做了以下,它的作品。

echo“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

你的awk分隔符是:和一个空格,但我猜测你的代码是使用tab缩进(因此不匹配只是一个空格)。

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

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

这对我来说在slackware linux上使用bash 4.3.46和awk 4.1.3。

尝试这个:

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