В основном я хочу вставить строку текста после строки, содержащей последнее происшествие определенной строки, не влияя на остальную часть файла.
Я предполагаю, что должен продолжить двигаться как это:
В моем случае, после строки, содержащей последнее вхождение определенного слова, больше нет текста: просто определенное число пустых строк и специальной строки #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
Я являюсь очень новым для окружения сценариев, поэтому любая справка значительно ценилась бы.
Вопрос:
Насколько я понимаю Вы просите вставлять строку после последней строки, где определенное слово появляется. То, что прибывает затем в файл, незначительно, пока он сохраняется. Скажем, слово Third
и строка, которая будет вставлена, Fourth line
. Perl может помочь в этом экземпляре:
perl -0777 -pe 's/(.*Third[^\n]*)/$1\nFourth line/s' input.txt
Можно просто вставить строки на определенном положении как это:
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
).