awk найти линии между диапазонами - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь использовать awk, чтобы получить все строки между двумя словами.Мое первое слово - это каталог, а второе - последовательность из четырех минус-символов, например: ----

Вот что я пробовал:

awk '/\/ua\/Debug\/xeGenReport\/src\//,/----/ errorLog2

Пример ввода:

/ua/Debug/xeGenReport/src/
++++
16955:../main2.C:492:22: error: something
16959:../main2.C:577:21: error: something
16963:../report2.C:2630:22: error: something
----
/ua/Debug/xeGenReport/src/ // I don't want this line in the final output
----
More text here I don't want

Желаемый результат:

/ua/Debug/xeGenReport/src/
++++
16955:../main2.C:492:22: error: something
16959:../main2.C:577:21: error: something
16963:../report2.C:2630:22: error: something
----

Я пробовал другие перестановки, все они дают мне разные ошибки.

Ответы [ 2 ]

2 голосов
/ 21 июня 2019

Вам нужно выйти из /

Примерно так (исключить старт / стоп):

awk '/----/{f=0} f; /\/ua\/Debug\/xeGenReport\/src/{f=1}' file
++++
16955:../main2.C:492:22: error: something
16959:../main2.C:577:21: error: something
16963:../report2.C:2630:22: error: something

Или вот так (включая старт / стоп): (используйте выход, чтобы не получитьбольше, чем нужно)

awk '/\/ua\/Debug\/xeGenReport\/src/{f=1} f; /----/{exit}' file
/ua/Debug/xeGenReport/src/
++++
16955:../main2.C:492:22: error: something
16959:../main2.C:577:21: error: something
16963:../report2.C:2630:22: error: something
----

Редактировать: это из моего личного архива:)

* Печатать текст между "START / END" не включительно (заменить {f = 0} на {выход} для предотвращения повторения)

эксклюзив
awk '/ START / {f = 1; следующий} / END / {f = 0} f'
awk'/ END / {f = 0} f;/ START / {f = 1} '# best
включительно
awk' / START / {f = 1} / END / {f = 0; печать} f '
awk'/ START / {f = 1} f;/ END / {f = 0} '
awk' / START /, / END / '
sed -n' / SRART /, / END / p '
Не печатать между START и END #включительно
awk '/ START / {f = 1; далее}! f;/ END / {f = 0} '
awk' / START /, / END / {следующий} 1 '
sed' / START /, / END / d '

1 голос
/ 21 июня 2019

Существует школа мысли, что шаблонов дальности следует избегать, но, поскольку Йотн уже опубликовал версию в стиле флага, я покажу эту альтернативу, которая более близко соответствует вашей первоначальной попытке:

$ awk '/\/ua\/Debug\/xeGenReport\/src/,/----/ {print; if ($0 ~ /----/) exit}' file
/ua/Debug/xeGenReport/src/
++++
16955:../main2.C:492:22: error: something
16959:../main2.C:577:21: error: something
16963:../report2.C:2630:22: error: something
----
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...