Adicionando texto ao início e ao final de vários arquivos?

2

Eu tenho vários arquivos em uma hierarquia de diretórios. Para cada arquivo, gostaria de adicionar "abcdef" ao início, em sua própria linha, e "ghijkl" até o final, em sua própria linha. Por exemplo, se os arquivos continham inicialmente:

# one/foo.txt
apples
bananas

# two/three/bar.txt
coconuts

Depois disso, espero que eles contenham:

# one/foo.txt
abcdef
apples
bananas
ghijkl

# two/three/bar.txt
abcdef
coconuts
ghijkl

Qual é a melhor maneira de fazer isso?

Eu cheguei até onde:

# put stuff at start of file
find . -type f -print0 | xargs -0 sed -i 's/.../abcdef/g'

# put stuff at end of file
find . -type f -print0 | xargs -0 sed -i 's/.../ghijkl/g'

mas não consigo descobrir como colocar as elipses.

    
por John Feminella 30.08.2012 / 16:53

3 respostas

2

Este não é um trabalho para sed . Para adicionar linhas, basta usar o redirecionamento de E / S .

Para um único arquivo chamado filename , você pode fazer o seguinte:

mv filename temp
(echo abcdef ; cat temp ; echo ghijkl) > filename
rm temp

Para fazer isso automaticamente em todos os arquivos no diretório atual, use find e xargs :

find -type f -print0 | xargs -0 -I % sh -c '
    mv "%" temp
    (echo abcdef ; cat temp ; echo ghijkl) > "%"
'
rm temp
    
por 30.08.2012 / 17:10
2

Se você tem o GNU sed disponível, você pode usar as construções i\ e a\ :

Use os endereços de linha para aplicar na primeira e última linha, respectivamente:

find . -type f -print0 | xargs -0 sed -i -e '1i\abcdef' -e '$a\ghijkl'
    
por 30.08.2012 / 17:23
-1
For files in directory as file
echo "abcde" && cat file && echo "fghijk" > file
    
por 30.08.2012 / 17:16