O seguinte comando funcionará nas duas situações:
sed '/Lorem.*/ {N; s/Lorem.*industry\./string to replace/g}' filename
Mais explicações: Como pode Usar sed para substituir uma string de várias linhas?
Eu sou novo no uso de sed, mas tenho experimentado s/..../..../
(substituto) de sed para modificar uma sentença completa se estiver em uma linha, mas não tenho conhecimento de uma solução alternativa sobre como modificar uma frase que pode ter sido separada duas linhas como:
Isto:
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
é realmente escrito assim:
Lorem Ipsum is simply dummy text of the
printing and typesetting industry.
Como você pode detectar isso ou codificá-lo para substituir a frase inteira, mesmo que seja em duas linhas em vez de uma?
O seguinte comando funcionará nas duas situações:
sed '/Lorem.*/ {N; s/Lorem.*industry\./string to replace/g}' filename
Mais explicações: Como pode Usar sed para substituir uma string de várias linhas?
Enquanto sed pode combinar padrões em várias linhas (usando os comandos N
ou H
para acrescentar linhas sucessivas antes da correspondência), isso está bem fora de sua zona de conforto. Tente apenas se você gosta de dor.
O Perl pode fazer bem esse tipo de coisa. Use a -p
switch para fazer com que ela processe uma entrada padrão de cada vez e imprima o registro modificado (à la sed) e -000
para ativar o modo de parágrafo (onde os registros são separados por linhas em branco). Em uma expressão regular, \s
corresponde a qualquer caractere de espaço em branco, incluindo um nova linha.
perl -p -000 -e 's/Lorem\s+Ipsum\s+is\s+simply\s+dummy\s+text\s+of\s+the\s+printing\s+and\s+typesetting\s+industry\./Replacement text/g'
Se você quiser colocar uma nova linha no texto de substituição quando o original contiver um, isso é mais complicado. Como fazer isso depende de seus requisitos para onde colocar a nova linha.
sed não consegue ler facilmente em várias linhas.
Use perl -i -0pe 's/.../.../...'
em vez disso.
Tags command-line sed