Copie um padrão de correspondência de linha para ao lado de outra linha de padrão correspondente usando sed

1

Eu quero copiar a linha contendo www.website.com para a linha que contém thetext .

Por exemplo, quero transformar essa entrada:

Lorem ipsum dolor sit amet, elit.
Cras eu www.website.com velit vitae
Pellentesque interdum
thetext
Sed ullamcorper tellus

para esta saída:

Lorem ipsum dolor sit amet, elit.
Cras eu www.website.com velit vitae
Pellentesque interdum
thetextCras eu www.website.com velit vitae
Sed ullamcorper tellus

Não tenho ideia de como copiar e colar usando sed . Parece um pouco complicado.

    
por lokomika 15.07.2011 / 20:40

2 respostas

1

Não sei se é exatamente isso que você quer, mas:

  1. Quando vir a linha interessante (a linha que contém www.website.com ), copie-a para o espaço de espera.
  2. Quando vir o texto para substituir ( thetext ), anexe o conteúdo do espaço de espera e
  3. limpe o resultado.
sed -e '/www\.website\.com/h' \
    -e '/thetext/{' -e 'G' -e 's/\n//' -e '}'

Eu recomendo mudar para o awk para qualquer coisa além de um simples s/// .

awk '
    /www\.website\.com/ { line=$0 }
    /thetext/ { $0 = $0 line }
    1'
    
por 15.07.2011 / 20:49
2

Você também pode usar ed (aqui usado no Bash shell) para mover & junte as linhas da seguinte forma:

str='
Lorem ipsum dolor sit amet, elit.
Cras eu www.website.com velit vitae
Pellentesque interdum
thetext
Sed ullamcorper tellus
'

# cf. http://wiki.bash-hackers.org/howto/edit-ed
cat <<-'EOF' | sed -e 's/^ *//' -e 's/ *$//' | ed -s <(echo "$str")
   H
   /www\.website\.com/m/thetext/
   -1,.j
  ,p
  q
EOF

Se você for editar arquivos no local, ed pode ser sua ferramenta de escolha.

    
por 16.07.2011 / 13:19

Tags