Grep
使用“:”作為欄位分隔符將 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’: ‘’{列印 $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}’