Eu sou novo no uso do sed, mas experimentei o sed s/..../..../
(substituto) para modificar uma frase completa, se estiver em uma linha, mas não conheço uma solução alternativa sobre como modificar uma frase que pode ter sido separada em duas linhas, como:
Este:
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 ela esteja em duas linhas, em vez de uma?
command-line
sed
DᴀʀᴛʜVᴀᴅᴇʀ
fonte
fonte
Respostas:
O comando a seguir funcionará nas duas situações:
Mais explicações: Como posso usar o sed para substituir uma string de várias linhas?
fonte
sed
nada mais. E esta é a questão do título. O título não é sobreperl
.Lorem
estiver na última linha, um defeito é compartilhado com a sua versão.)Embora o sed possa corresponder aos padrões em várias linhas (usando os comandos
N
ouH
para acrescentar linhas sucessivas antes da correspondência), isso está bem fora da sua zona de conforto. Tente apenas se você gosta de dor.Perl pode fazer esse tipo de coisa muito bem. Use a
-p
opção para processar a entrada padrão, um registro de cada vez, imprimir o registro modificado (à la sed) e-000
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 uma nova linha.Se você deseja inserir uma nova linha no texto de substituição quando o original contiver uma, isso é mais complicado. Como fazer isso depende dos seus requisitos de onde colocar a nova linha.
fonte
sed
. Também está marcado comsed
, não comperl
.O sed não pode ler facilmente através de várias linhas. Use em
perl -i -0pe 's/.../.../...'
vez disso.fonte
perl
for mais simples para você, isso não significa quesed
raramente valha a pena.