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

1

Eu preciso de um comando SED ou AWK para encontrar a última linha em um arquivo e adicionar </pre> a ele.

Como:

LINELINELINE

Altera para:

LINELINELINE</pre>
    
por Lee Ikard 22.06.2016 / 05:21

3 respostas

1

Você também pode usar o que é conhecido como um comando composto . Essa é uma lista de comandos, que o shell trata como um único comando com o propósito de qualquer coisa externa ao comando composto.

Sim, isso é um pouco de uma definição recursiva; um exemplo facilita a compreensão.

Por exemplo, para cercar um arquivo com <pre> e </pre> , você pode usar um comando como:

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

Se você não tem um arquivo temporário, mas quer envolver a saída de algum comando com outra coisa, você pode injetar esse comando em vez do cat :

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

Isso tudo funciona aplicando o redirecionamento à saída de todo o comando composto, em vez de apenas suas partes.

Claro, isso não usa sed ou awk conforme solicitado, mas para esse tipo de tarefa, ir para essas ferramentas é um pouco exagerado.

    
por 22.06.2016 / 15:28
0

Que tal isso:

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

Ou no começo é um pouco mais complicado, você precisa 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 - significa stdin, portanto, a primeira parte do arquivo concatenado é o que for canalizado para ele (nesse caso, o echo ). O segundo argumento é o arquivo que você deseja adicionar. Os arquivos concatenados são então enviados para newfile .

    
por 22.06.2016 / 05:24
0

Com (GNU) sed (conforme a tag na pergunta):

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

Isto irá adicionar uma linha com </pre> para file.in .

Alternativamente:

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

Isso adicionará </pre> à última linha em file.in .

    
por 25.06.2016 / 23:01

Tags