Sed: Ignorando caracteres do período

0

Eu sei que posso combinar períodos com \. , mas através de tentativa e erro eu ainda não consigo ter meu padrão ignorar o caractere de período.

Eu tentei variações como:

\[^.] \[^.]+

Eu quero ter um código como

foo("some text").arg("more text");

não seja tocado enquanto o código como

foo("some text");

corresponde a um padrão e é substituído por outra coisa

Além disso, encontrei outro problema

Um caso como:

tr("I am some text") .arg(i do stuff) .arg(I also do stuff) onde ele precisa ser tratado de 2 até n linhas disto.

Eu quero que esse tipo de texto seja deixado em paz porque, a partir de agora, o tr seria excluído e causaria um erro de sintaxe.

    
por Klamz 30.08.2016 / 20:45

1 resposta

0

Para ser um "não-período", a sequência [^.] é o que você deseja. Nos seus exemplos, você tem um \ na frente do [ , o que está errado.

Então, por exemplo:

foo("some text").arg("more text");
foo("some text");

% sed 's/foo("some text")[^.]/replaced text/' tstfile
foo("some text").arg("more text");
replaced text

Observe que isso também substituiu o caractere após o foo(..) . Se você quiser manter isso, então podemos lembrar:

% sed 's/foo("some text")\([^.]\)/replaced text/' tstfile
foo("some text").arg("more text");
replaced text;
    
por 30.08.2016 / 20:56