Inserindo uma nova linha de texto após a correspondência de uma linha de texto (sed)?

1

Eu preciso inserir uma tag de entrada HTML oculta em qualquer tag de formulário dentro de um monte de arquivos HTML.

Minha ideia é pesquisar por qualquer instância de

<form

e, se encontrado, insira uma linha abaixo dele que contenha:

<input type="hidden" name="csrf_token" value="$csrf_token" /> 

Qual é a melhor maneira de resolver isso? Estou perto com

sed -e '/<form/a\<input type="hidden" name="csrf_token" value="$csrf_token"/>'
    
por mmattax 23.01.2013 / 16:34

2 respostas

1

Entendi. Aqui está como é feito:

find . -name \*.html | xargs sed -i '/<form/a\<input type="hidden" name="csrf_token" value="$csrf_token" />'
    
por 23.01.2013 / 16:50
1

Para adicionar algo abaixo de cada <form , você precisa adicionar & para indicar que deseja manter a sequência capturada (mais \n , como você mencionou, é necessário):

$ find *.html | xargs sed -ie 's/<form/&\n\<input type="hidden" name="csrf_token" value="$csrf_token"\/>/g'
    
por 23.01.2013 / 16:58