Вставьте строку текста после строки, содержащей последнее происшествие указанного слова

В основном я хочу вставить строку текста после строки, содержащей последнее происшествие определенной строки, не влияя на остальную часть файла.

Я предполагаю, что должен продолжить двигаться как это:

  1. удалите все строки после последнего вхождения указанного слова
  2. добавьте желаемую строку к нижней части файла
  3. добавьте назад ранее удаленную часть, прямо после недавно вставленной строки

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

Это - демонстрационный входной файл:

First line
Second line
Third line 1
Third line 2
Third line N



#EOF

Ради этого примера я хочу добавить строку с текстом Fourth line прямо после строки, содержащей последнее возникновение слова Third. Результат должен быть следующие:

First line
Second line
Third line 1
Third line 2
Third line N
Fourth line



#EOF

Вы видите что количество символов новой строки после Fourth line остается таким же как прежде.

Какая команда является лучшей в этом случае? Я попробовал следующее, но все строки в файле были удалены и только Fourth line был добавлен.

sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba' file
echo -e "\nFourth line\n\n\n#EOF" >> file

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

-1
задан 5 September 2018 в 06:54

2 ответа

Вопрос:

Насколько я понимаю Вы просите вставлять строку после последней строки, где определенное слово появляется. То, что прибывает затем в файл, незначительно, пока он сохраняется. Скажем, слово Third и строка, которая будет вставлена, Fourth line. Perl может помочь в этом экземпляре:

perl -0777 -pe 's/(.*Third[^\n]*)/$1\nFourth line/s' input.txt
1
ответ дан 28 October 2019 в 01:01

Можно просто вставить строки на определенном положении как это:

sed '4iFourth Line' file

Или используйте perlвозможности соответствия мультилинии, если Вы не знаете, какую строку необходимо вставить.

perl -0777 -pe 's/(\n{2,}#EOF)/\nFourth Line$1/g' file

Объяснение:

  • -0777 - хлебайте целый файл (чтение как одна строка)
  • (\n{2,}#EOF) - соответствие и получение 2 + последовательный \n сопровождаемый #EOF
  • \nFourth Line$1 - замените соответствие \nFourth Line сопровождаемый соответствием шаблона ($1).
0
ответ дан 28 October 2019 в 01:01

Другие вопросы по тегам:

Похожие вопросы: