Использование скрипта оболочки для добавления '' после последней строки в большом файле

Использование скрипта оболочки для добавления '' после последней строки в большом файле

Мне нужна команда SED или AWK, чтобы найти последнюю строку в файле и добавить </pre>к ней.

Такой как:

LINELINELINE

Изменения в:

LINELINELINE</pre>

решение1

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

Да, это своего рода рекурсивное определение; пример облегчит понимание.

Например, чтобы заключить файл в скобки <pre>и </pre>, можно использовать такую ​​команду:

( printf '<pre>' ; cat originalfile ; printf '</pre>' ) > newfile

Если у вас нет временного файла, но вы хотите окружить вывод какой-либо команды чем-то другим, вы можете ввести эту команду вместо cat:

( printf '<pre>' ; find / -type d -print ; printf '</pre>' ) > somefile

Все это работает путем применения перенаправления к выводу всей составной команды, а не только ее частей.

Конечно, здесь не используются sedили , awkкак было предложено, но для такого рода задач обращение к этим инструментам — это явное излишество.

решение2

Как насчет этого:

echo "</pre>" >> /path/to/the/file

Или в начале все немного сложнее, вам придется использовать другой файл для вывода.

echo "<pre>" | cat - /path/to/the/file > /path/to/the/newfile

catозначает concatenate, и в этом случае у него есть два аргумента: the -означает stdin, поэтому первая часть объединенного файла — это то, что передается ему по конвейеру (в этом случае echo). Второй аргумент — это файл, к которому вы хотите добавить начало. Объединенные файлы затем выводятся в newfile.

решение3

С (GNU) sed(согласно тегу в вопросе):

$ sed -i -e '$a\</pre>' file.in

Это будетдобавлятьлиния с </pre>на ней к file.in.

Альтернативно:

$ sed -i -e '$s@\(.*\)@\1</pre>@' file.in

Это добавит </pre>последнюю строку в file.in.

Связанный контент