Como pesquisar '/>' com sed

Como pesquisar '/>' com sed

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

Aqui está meu roteiro:

#!/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 \ntambém combinam. Por exemplo, se um arquivo for assim:

abc
def
<abc/>
<abc/>

Depois de executar meu script, obterei 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 também acrescenta a nova string para cada linha antes da primeira />.

Responder1

Sim. A expressão 0,/regex/fará com que o comando seguinte ( a) seja aplicado atodas as linhasaté (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, em seguida, aplicará o comando apenas na linha dentro do intervalo que corresponde à expressão, enquanto passa todas as outras linhas inalteradas.

A nova linha literal é necessária para sinalizar o final do texto que você adiciona.

informação relacionada