Quero encontrar uma string em um arquivo:
exemplo
https://google.com/first/second/45683
e eu gostaria de reescrevê-lo e manter a linha original assim:
https://google.com/first/second/45683 https://yahoo.com/third/fourth/45683
Eu fiz algumas tentativas
sed -r 's@https://google.com/first/second/([a-Z0-9]+)@yahoo.com/third/fourth/\1@' arquivo.txt saída: yahoo.com/terceiro/quarto/45683
ele reescreve mas não mantém a linha original.
Outra tentativa
sed -r 'a\s@https://google.com/first/second/([a-Z0-9]+)@yahoo.com/third/fourth/\1@' arquivo.txt saída: https://google.com/first/second/45683 https://google.com/first/second/([a-Z0-9]+)@yahoo.com/third/fourth/1@
ele acrescenta ambas as linhas, mas não reescreve a segunda linha.
Você precisa dizer
sed
para imprimir a linha correspondente primeiro, antes de modificá-la com os//
comando. Algo assim:ou, mais curto,
Isto diz, "para linhas que correspondem à expressão
https://google.com/first/second/[a-zA-Z0-9]+
, primeiro imprima a linha e então modifique usando as//
expressão dada". A linha modificada é impressa porque esse é o comportamento padrão desed
.Mantenha-o simples (estúpido):
O
&
atalho é toda a parte esquerda correspondente.parece com isso:
Eu entendo:
Aproveitar.
Usando GNU awk para o 3º argumento para
match()
:Você já tentou isso?
Melhorado para maior clareza ao escapar as barras:
Espero que isso ajude!