Я хотел бы отфильтровать результат команды grep, например:
myRepo/path/to/my/file.php:123: error_log(' - myError');
Если я сделаю следующее, это сработает.
echo "myRepo / path / to / my / file.php: 123: error_log ('- myError');" | awk -F ':' '{распечатать $ 1}'
Но когда это результат команды grep, она выводит всю строку, почему?
grep -rn "myError" | awk -F ':' '{распечатать $ 1}'
У меня CentOS 6 с Awk 3.1.7, bash 4.1.2
Попробуй это:
grep -rn "myError" | awk -F ': [\ t] *' '{напечатать $ 1}'
Ваш разделитель awk - это: и пробел, но я предполагаю, что ваш код использует табуляцию для отступа (и, следовательно, не соответствует только пробелу).
Вы можете попробовать изменить свой grep на следующий (что приводит к тому, что awk будет соответствовать: и символу табуляции).
grep -rn "myError"|awk -F':\t' '{ print $1 }'
У меня это работает с использованием bash 4.3.46 и awk 4.1.3 на slackware linux.