Мне нужна команда 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
.