Заменить шаблон RegEx между двумя словами в одной строке - PullRequest
0 голосов
/ 17 декабря 2018

Я хочу найти все случаи, когда между строками «START:» и «END:» встречается одно или несколько заглавных слов, за которыми следует двоеточие «:».Затем я хочу добавить точку перед каждым экземпляром.

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

Я хочу проверить, что происходит, если перед заголовком есть информациянаходясь в поиске.Таким образом, здесь мы лежим: и конец.СТАРТ: Теперь мы видим всю важную информацию, которую имеем вместе с: кучей странных: заголовков.Я хочу выделить все заголовки и добавить точки перед ними, чтобы разделить информацию на разные предложения. Теперь я могу остановиться, потому что попал в конечный заголовок.КОНЕЦ: Больше информации после этого я не хочу: захват.Конец.

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

Я хочу проверить, что происходит, если перед заголовком, который я ищу, есть информация.Таким образом, здесь мы лежим: и конец.СТАРТ: Теперь мы видим всю важную информацию, которая у нас есть.Вместе с: куча.Странно: заголовки.Я хочу выделить все.Заголовки: и добавьте перед ними точки, чтобы разделить информацию на разные.Предложения: Теперь я могу остановиться, потому что попал в конец заголовка.КОНЕЦ: Больше информации после этого я не хочу: захват.Конец.

enter image description here

Следующий код добавит точку перед каждым из заголовков.Часть, с которой я борюсь, ограничивает замену между строками «START:» и «END:».Прямо сейчас он добавляет периоды повсюду.

sed -r "s/(\b(.?[[:upper:]]\w+)++:)/. \1/g" TestData.txt

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

Так что в действительности мой файл данных выглядит следующим образом:

I want to test what happens if there is information before the header I am looking for. Thus Here We Lie: And end. START: Now we see all the important information that we have Along With: a bunch of Strange: headers. I want to highlight all of the Headers: and add periods before them to separate the information into different Sentences: Now I can stop because I hit the end header. END: More information after that I do Not Want To: capture. The End.

РЕДАКТИРОВАТЬ 1: Исправлена ​​строка реальности

1 Ответ

0 голосов
/ 17 декабря 2018

Если вы можете использовать GNU awk и установить его, вы можете использовать его вместо sed.\y - это словосочетание, эквивалентное \b в sed, а & - соответствующая захваченная группа в контексте awk.

gawk 'match($0, /(.+)START(.+)END(.+)/, arr){gsub(/(\y(.?[[:upper:]]\w+)++:)/,".&",arr[2]); print arr[1] "START"arr[2]"END" arr[3] }' file
.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...