Como pesquisar '/' com sed

0

Minha necessidade é acrescentar uma nova string após o primeiro /> para todos os arquivos em um diretório.

Aqui está o meu script:

#!/bin/bash

find ./ -type f -print0 | while IFS= read -r -d '' myfile; do
    sed -i '0,/\/>/asome text here' $myfile
done

No entanto, parece que todos os \n são correspondidos também. Por exemplo, se um arquivo é assim:

abc
def
<abc/>
<abc/>

Após a execução do meu script, obtive o resultado abaixo:

abc
some text here
def
some text here
<abc/>
some text here
<abc/>

Ele acrescenta a nova string para a primeira ocorrência de /> , mas acrescenta a nova string para cada linha antes do primeiro /> também.

    
por Yves 22.05.2017 / 11:21

1 resposta

3

Sim. A expressão 0,/regex/ fará com que o comando a seguir ( a ) seja aplicado a todas as linhas até (e incluindo) a primeira correspondência da expressão regular.

Meu palpite é que você gostaria de fazer

sed -i '0,/regex/{//a text
}' "$myfile"

Isso selecionará todas as linhas até a primeira correspondência da expressão regular e aplicará o comando somente na linha dentro dessa faixa que corresponda à expressão, passando todas as outras linhas inalteradas.

A nova linha literal é necessária para sinalizar o fim do texto adicionado.

    
por 22.05.2017 / 11:26

Tags