Добавить строки на основе логики - PullRequest
0 голосов
/ 19 сентября 2019

Ищите способ добавить три строки в файл, если их не существует, основываясь на некоторой логике.

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

Логика выглядит так:

Добавьте эти три строки ...


** #MEA_DATA_END **;
MEA OK;TRUE

... if ...

\;(FALSE|TRUE)\;-?\d{0,3}\;-?\d{0,3}.?\d{0,3}\;\n

... не сопровождается ...

$\n^\*\* #MEA_DATA_END \*\*\;

... или когда последняя строка файла:

\;(FALSE|TRUE)\;-?\d{0,3}\;-?\d{0,3}.?\d{0,3}\;\z

Входной файл, который неНе может быть изменено:

FALSE;FALSE;-1;25.0;FALSE;FALSE;-1;25.0;

** #MEA_DATA_END **;
MEA OK;TRUE

Входной файл, который будет изменен:

FALSE;FALSE;-1;25.0;FALSE;FALSE;-1;25.0;

Some other text

Выход:

FALSE;FALSE;-1;25.0;FALSE;FALSE;-1;25.0;

** #MEA_DATA_END **;
MEA OK;TRUE

Some other text

Другой входной файл, который будет изменен:

FALSE;FALSE;-1;25.0;FALSE;FALSE;-1;25.0;

Вывод:

FALSE;FALSE;-1;25.0;FALSE;FALSE;-1;25.0;

** #MEA_DATA_END **;
MEA OK;TRUE

Я хотел бы создать скрипт с использованием sed или awk или аналогичного.Кто-нибудь знает решение этой проблемы?

1 Ответ

0 голосов
/ 19 сентября 2019

Это не совсем правильно, и у меня нет времени на его отладку прямо сейчас, но подход состоит в том, чтобы отделить ваши записи многострочной строкой, которую вы НЕ хотите заменить, и затем в каждой записи заменить строку, которую вы делаетехочу заменить:

BEGIN { RS=";(FALSE|TRUE);-?[0-9]{0,3};-?[0-9]{0,3}.?[0-9]{0,3};\n\n[*][*] #MEA_DATA_END [*][*];"; ORS="" }
{ print gensub(/;(FALSE|TRUE);-?[0-9]{0,3};-?[0-9]{0,3}.?[0-9]{0,3};/,"&\n\n** #MEA_DATA_END **;","g") RT }

Выше используется GNU awk для RS и RT с несколькими символами.Вы сохраните его в файле с именем foo.awk, а затем выполните его как awk -f foo.awk inputfile.Вы можете сохранить ведущую часть регулярного выражения в переменной, чтобы избавить от необходимости дважды жестко ее кодировать.

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