2016-10-15 3 views
0

Почему grep возвращает несогласованные строки? Вы можете видеть, что grep подсвечивает матч. Как я могу получить желаемое поведение? Это в Ubuntu.Почему grep возвращает несогласованные строки

$ service --status-all | grep 'friendly'
[? ] apport
[? ] console-setup
[? ] cryptdisks
[? ] cryptdisks-early
[? ] dns-clean
[+] -recovery
[? ] irqbalance
[? ] killprocs

Ничего смешного в псевдониме.

$ alias 
alias grep='grep --color=auto' 
+2

не могу показаться, чтобы повторить. –

+1

в командной строке: «grep», чтобы увидеть, какой grep вы используете. Я просто попробовал свою команду (используя тот же псевдоним) и получаю только вывод, содержащий ожидаемое совпадение. Я запускаю Ubuntu. – mangotang

ответ

3

Похоже, что это не grep. На консоль отправляется stderr.

$ service --status-all > test.txt 
[ ? ] apport 
[ ? ] console-setup 
... 

против

$ service --status-all 2> test.txt 
<no output> 

Таким возможным решением является перенаправление stderr в stdout затем Grep:

$ сервис --status-все 2> & 1 | Grep «дружественные»
[+] дружественного -recovery

0

Вы можете контролировать количество контекста отображается до и после матча, используя -C флаг, т.е. service --status-all | grep -C 0 'friendly' будет отображать только точные строки, совпавших без какого-либо контекст.

Для получения дополнительной информации вы можете увидеть этот ответ: https://stackoverflow.com/a/9083/2791719

Смежные вопросы