Мне сложно понять, как достичь того, что я хочу использовать awk, и после поиска довольно долгое время я не мог найти решение, которое я ищу.Использование awk для форматирования текста
У меня есть входной текст, который выглядит следующим образом:
Some text (possibly containing text within parenthesis).
Some other text
Another line (with something here) with some text
(
Element 4
)
Another line
(
Element 1, span 1 to
Element 5, span 4
)
Another Line
Я хочу, чтобы правильно форматировать странные линии между «(» и «)». Ожидаемый результат выглядит следующим образом:
Some text (possibly containing text within parenthesis).
Some other text
Another line (with something here) with some text
(Element 4)
Another line
(Element 1, span 1 to Element 5, span 4)
Another Line
Глядя на переполнение стека я нашел это:
How to select lines between two marker patterns which may occur multiple times with awk/sed
Так что я использую сейчас echo $text | awk '/ \(/{flag=1;next}/\)/{flag=0}flag'
Который почти работает за исключением того, отфильтровывает несоответствующие линии, вот результат, полученный этой последней командой:
(Element 4)
(Element 1, span 1 to Element 5, span 4)
Кто-нибудь знает, как это сделать? Я открыт для любых предложений, в том числе не используя awk, если вы знаете лучше.
Бонусное очко, если вы научите меня, как удалить syntaxic окраски на моем кодовых блоках вопроса :)
Спасибо миллиарда раз
Edit: Итак, я принял @ решение EdMorton как он дал что-то используя awk (ну, GNU awk). Тем не менее, я в настоящее время использую заклинания sed voooo @ aaron с большим успехом и, вероятно, продолжу это делать до тех пор, пока не удалю что-нибудь новое по этой конкретной утилите.
Я настоятельно рекомендую прочитать объяснения Эдмонтона, последний абзац сделал мой день. Если у кого-то есть хорошие ресурсы, связанные с awk/sed, они могут делиться, не стесняйтесь делать это в комментариях.
Вы можете использовать '< ! - language: lang-none -> ', чтобы не выделять блок кода. См. [Подсветка синтаксиса] (http://stackoverflow.com/editing-help#syntax-highlighting). – e0k
Итак, вы хотите напечатать то, что находится в круглых скобках '()', но также и то, что снаружи? Единственная модификация для удаления разрывов строк между '()'? – e0k
@ e0K да, точно, и большое спасибо за синтаксический фокус. Должен признаться, что мне было слишком лениво искать это после столь многих поисковых запросов, касающихся моей проблемы с awk :) – daformat