grep -A1 'blah' logfile
Благодаря этой команде для каждой строки, содержащей «бла», я получаю вывод строки, содержащей «бла», и следующую строку в лог-файле. Это может быть простой, но я не могу найти способ пропустить строку, которая имеет «бла» и показать только следующую строку в выводе.
-A1
вариантаcurl whatismyip.org | grep -A1 'Your IP Address'
-A1
. Спасибо!Ответы:
вы можете попробовать с awk:
источник
awk '/blah/{getline; getline; print}' logfile
если вы хотите придерживаться grep:
или
источник
Трубка - твой друг ...
Используйте,
grep -A1
чтобы показать следующую строку после матча, затем направить результатtail
и захватить только 1 строку,источник
Отличный ответ от raim, был очень полезен для меня. Это тривиально расширить, чтобы напечатать, например, строку 7 после шаблона
источник
Если эти следующие строки никогда не содержат «бла», вы можете отфильтровать их с помощью:
Использование
cat logfile | ...
не требуется.источник
В общем, я согласен, что вы спрашиваете много о grep, и что другой инструмент может быть лучшим решением. Но во встроенной среде я могу не захотеть
sed
илиawk
просто делать это. Я обнаружил, что работает следующее решение (если они не являются смежными):По сути, сопоставьте их, добавив 1 строку контекста для каждого совпадения, а затем передайте это через обратное совпадение с вашим исходным шаблоном, чтобы удалить их. Это, конечно, означает, что вы можете предположить, что ваш шаблон не отображается в «следующей» строке.
источник
До сих пор было дано много хороших ответов на этот вопрос, но я все еще скучаю по одному из них,
awk
не используяgetline
. Так как, в общем-то , использовать не нужноgetline
, я бы пошел на:или
Логика всегда заключается в сохранении строки, в которой находится «бла», и последующей печати строк, следующих за одной строкой.
Тест
Образец файла:
Получить все строки после "бла". Это печатает другой "бла", если он появляется после первого.
Получить все строки после "бла", если они не содержат "бла" сами.
источник
Я не знаю ни одного способа сделать это с помощью grep, но можно использовать awk для достижения того же результата:
источник
Perl однострочное оповещение
просто для удовольствия ... печатать только одну строку после матча
еще веселее ... печатать следующие десять строк после матча
своего рода обман, хотя, так как на самом деле есть две команды
источник
$. == $next && print
так же, какprint if $. == $next
grep -A1
). Если вы хотите печатать только следующие строки, но не строку с соответствием, то вы должны оставить это в таком порядке. (просто отмечая, как $ next будет перекрыт для последовательных матчей)Похоже, вы используете не тот инструмент. Grep не так уж и сложен, я думаю, вы хотите использовать awk как инструмент для работы:
awk '/blah/ { getline; print $0 }' logfile
Если у вас возникнут проблемы, дайте мне знать, я думаю, что стоит изучить немного awk, это отличный инструмент :)
ps Этот пример не выигрывает «бесполезное использование награды кошки»;) http://porkmail.org/era/unix/award.html
источник
grep / Pattern / | tail -n 2 | голова -n 1
Хвост сначала 2, а затем возглавляй последний, чтобы получить ровно первую строчку после матча.
источник