Grep

使用“:”作為欄位分隔符將 grep 結果傳遞給 awk

  • August 26, 2016

我想過濾 grep 命令的結果,例如:

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

如果我執行以下操作,它會起作用。

迴聲“myRepo/path/to/my/file.php:123:error_log(’-myError’);” | awk -F’: ‘’{列印 $1}’

但是當它是 grep 命令的結果時,它會輸出整行,為什麼?

grep -rn “我的錯誤” | awk -F’: ‘’{列印 $1}’

我有 CentOS 6 和 Awk 3.1.7,bash 4.1.2

您的 awk 分隔符是一個 : 和一個空格,但我猜您的程式碼正在使用製表符進行縮進(因此僅在空格上不匹配)。

您可以嘗試將您的 grep 更改為以下內容(這會導致 awk 匹配 : 和製表符)。

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

這適用於我在 slackware linux 上使用 bash 4.3.46 和 awk 4.1.3。

試試這個:

grep -rn “我的錯誤” | awk -F’:

$$ \t $$*’ ‘{列印 $1}’

引用自:https://serverfault.com/questions/799348