Мне нужна команда SED или AWK, чтобы найти последнюю строку в файле и добавить к ней </pre> .
Такие как:
LINELINELINE
Изменения в:
LINELINELINE</pre>
Вы также можете использовать так называемую составную команду. Это список команд, которые оболочка обрабатывает как отдельную команду для чего-либо внешнего для составной команды.
Да, это отчасти рекурсивное определение; пример облегчает понимание.
Например, чтобы окружить файл <pre> и </pre> , вы можете использовать команду вроде:
( printf '<pre>' ; cat originalfile ; printf '</pre>' ) > newfile
Если у вас нет временного файла, а вы хотите окружить вывод какой-либо команды чем-то другим, вы можете ввести эту команду вместо cat:
( printf '<pre>' ; find / -type d -print ; printf '</pre>' ) > somefile
Все это работает путем применения перенаправления к выходным данным всей составной команды, а не только к ее частям.
Конечно, это не использует sed или awk как требуется, но для такого рода задач переход к этим инструментам является излишним.
С (GNU) sed (согласно тегу в вопросе):
$ sed -i -e '$a\</pre>' file.in
Это добавит строку с </pre> в file.in
В качестве альтернативы:
$ sed -i -e '$s@\(.*\)@\1</pre>@' file.in
Это добавит </pre> к последней строке в file.in
Как насчет этого:
echo "</pre>" >> /path/to/the/file
Или в начале немного сложнее, вам придется использовать другой файл для вывода.
echo "<pre>" | cat - /path/to/the/file > /path/to/the/newfile
cat означает concatenate, и в этом случае у него есть два аргумента: - означает stdin, поэтому первая часть сцепленного файла - это то, что ему передано (в данном случае - echo). Второй аргумент - это файл, к которому вы хотите добавить префикс. Конкатенированные файлы затем выводятся в newfile .