Preciso de um comando SED ou AWK para encontrar a última linha em um arquivo e adicioná- </pre>
la.
Como:
LINELINELINE
Muda para:
LINELINELINE</pre>
Responder1
Você também pode usar o que é conhecido comocomando composto.Essa é uma lista de comandos, que o shell trata como um único comando para fins de qualquer coisa externa ao comando composto.
Sim, essa é uma definição recursiva; um exemplo torna mais fácil de entender.
Por exemplo, para colocar um arquivo entre <pre>
e </pre>
, você pode usar um comando como:
( printf '<pre>' ; cat originalfile ; printf '</pre>' ) > newfile
Se você não possui um arquivo temporário, mas deseja cercar a saída de algum comando com outra coisa, você pode injetar esse comando em vez de cat
:
( printf '<pre>' ; find / -type d -print ; printf '</pre>' ) > somefile
Tudo isso funciona aplicando o redirecionamento à saída de todo o comando composto, em vez de apenas às suas partes.
Claro, isso não usa sed
ou awk
conforme solicitado, mas para esse tipo de tarefa, recorrer a essas ferramentas é um exagero.
Responder2
Que tal agora:
echo "</pre>" >> /path/to/the/file
Ou no começo é um pouco mais complicado, você precisaria usar um arquivo diferente para a saída.
echo "<pre>" | cat - /path/to/the/file > /path/to/the/newfile
cat
significa concatenar, e tem dois argumentos neste caso: o -
meio stdin, então a primeira parte do arquivo concatenado é o que for canalizado para ele (neste caso, o echo
). O segundo argumento é o arquivo ao qual você deseja anexar. Os arquivos concatenados são então enviados para newfile
.
Responder3
Com (GNU) sed
(conforme tag na pergunta):
$ sed -i -e '$a\</pre>' file.in
Isso vaiadicionaruma linha com </pre>
nele para file.in
.
Alternativamente:
$ sed -i -e '$s@\(.*\)@\1</pre>@' file.in
Isso será adicionado </pre>
à última linha do arquivo file.in
.