O conteúdo do meu filename
arquivo é o seguinte (por exemplo):
My block of line starts from here
START
First line
second line
third line
END
and end to here for example.
Quero substituir o bloco de linhas entre START
e END
com apenas uma única palavra, por exemplo, com SINGLEWORD
. Como abaixo:
My block of line starts from here
SINGLEWORD
and end to here for example.
Eu posso encontrar meu bloco de linhas usando este comando:
grep -Pzo "START(.|\n)*END" filename
E o resultado da execução do comando acima será assim:
START
First line
second line
third line
END
Então eu usei este comando para combinar todas as linhas em uma única linha:
LAST_RESULT | sed -e :a -e '/$/N; s/\n/ /; ta'
Então eu vou receber este resultado:
START First line second line third line END
E com meu último comando, LAST_RESULTS | sed 's/.*/SINGLEWORD/'
eu as altero para "SINGLEWORD"
e obtenho esse resultado.
SINGLEWORD
Agora, o que eu quero é: Como posso usar este comando (ou o seu comando de sugestão) e substituir (no lugar) meu bloco de linhas pela palavra "SINGLEWORD"? E o resultado final será como este arquivo:
My block of line starts from here
SINGLEWORD
and end to here for example.
fonte
sed
deve ser possível, mas provavelmente mais difícil de ler (Olhe para esta questão )/
,*
,?
) nele e estes são apenas exemplo. e você poderia explicar seu comando.sed
):\/
,\*
,\?
perl -i -p0e 's/\/\*.*?\*\//SINGLEWORD/sm'
. Deveria funcionar #Eu queria saber se isso é possível sem
perl
,python
e outros. E eu encontrei esta solução usandosed
:Explicação:
/START.*END/
porSINGLEWORD
, / g correspondência global (quantas vezes for possível)Foi encontrado aqui .
@ KasiyA, obrigado Eu aprendi muitas coisas interessantes!
fonte