Usando um script de shell para adicionar um '' após a última linha em um arquivo grande

Usando um script de shell para adicionar um '' após a última linha em um arquivo grande

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 sedou awkconforme 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

catsignifica 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.

informação relacionada