Como adicionar uma linha em muitos arquivos

3

Tenho muitos arquivos .html e preciso adicionar uma metatag depois da tag de início do < head > em cada arquivo.

Como posso fazer isso?

É vim adequado para a tarefa?

    
por Chalist 25.12.2012 / 14:12

2 respostas

4

Em vim , você pode fazer:

:%s/<head\b[^>]*>/& <meta foo="bar">/g

Você também pode fazer isso no GNU sed , o que possivelmente seria mais adequado:

for file in *.html; do
    sed -i 's/<head\b[^>]*>/& <meta foo="bar">/g' "$file"
done

Esteja avisado, -i quebra os links simbólicos.

    
por 25.12.2012 / 14:18
1
sed -i '/PATTERN/ a\
    Line which you want to append' filename

para este exemplo

sed -i '/<HEAD>/a <meta>' test.txt
<HEAD>
<HEAD>

Resultado:

<HEAD>
<meta>
</HEAD>

O comando acima irá acrescentar uma nova linha depois que a string for correspondida. No entanto, isso dará resultado errado se o arquivo tiver uma string de entrada como

<HEAD><TITLE></TITLE>
</HEAD>

Resultado:

<HEAD><TITLE></TITLE>
<meta>
</HEAD>  //which is wrong.

Pode ser que possamos tentar essa abordagem:

sed -i 's/<HEAD>/<HEAD><meta>/' filename
    
por 25.12.2012 / 14:34