Regex, найти символ между двумя указанными c словами, прямо перед вторым словом - PullRequest
0 голосов
/ 17 апреля 2020

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

I хочу найти символ новой строки перед "##", этот "##" после "## бабы", но не сразу после, между ними есть какой-то текст. В файле много символов "##", всегда перед \ n См. Схему ниже:

Текущий входной файл

##

## baba

rosa rosa rosam rosae ipsum


##

##

Как только он найден, вставьте «helloworld», заданный в качестве аргумента сценария

Желаемый вывод

##

## baba {could also be "foo" or "bar"}

rosa rosa rosam rosae ipsum

helloworld


##

##

Я подошел настолько близко, насколько я хочу, к следующему сценарию. sh:

awk -i inplace -v foo=$2 -v new=$1'\n\n' '
    f&&/^##/{print new; f=0} {print} /^## baba/{f=1}
' a.md

Я хочу две последние вещи:

  1. , чтобы заменить бабу на аргумент $ 2 (переменная foo),
  2. для включения \ n в ^ ##, чтобы он был на одну строку выше.

Большое спасибо за любую помощь

1 Ответ

1 голос
/ 17 апреля 2020

Использование regex101.com при попытке использовать инструменты UNIX обычно приводит к большей путанице, чем к решению проблем, поскольку поддерживаемые им варианты регулярных выражений не соответствуют стандартным UNIX инструментам. Вы все еще не опубликовали ожидаемый результат, поэтому я предполагаю, что это то, что вы хотите:

$ awk -v new='helloworld' 'f&&/^##/{print new; f=0} {print} /^## baba/{f=1}' file
##




## baba



{append or replace with -> helloworld here}
helloworld
##

##
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...