Uma pergunta sobre sed

0

Alguém poderia me ajudar com sed para alterar essa linha global no documento:

432 |---|1 M a n y - w o r d s !|---| (123.WORDS)

Para:

432 |---|1.M.a.n.y.-.w.o.r.d.s.!|---| (123.WORDS)
    
por GoldHaloWings 22.10.2017 / 23:43

3 respostas

1

Se você quiser alterar todos os espaços em branco entre as duas ocorrências de |---| com pontos, use

sed 'h;s/ /./g;G;s/.*\(|---|.*|---|\).*\n\([^|]*\).*|\(.*\)//'

1) Você salva a linha original no buffer de retenção com h 2) Você substitui todos os espaços por pontos com s/ /./g 3) Você anexa a linha original do espaço de espera com G 4) O último comando s compõe a linha final da parte central com substituições e primeiro e último bit sem substituições.

    
por Philippos 23.10.2017 / 10:55
1

Experimente este comando sed :

sed 's/\s/./g;s/432./432 /;s/!|---|./!|---| /' source.txt

E é claro que você pode fazer o substitution no lugar com sed -i ou enviá-lo para outro arquivo com sed ... > output.txt

g : opção global

    
por George Udosen 23.10.2017 / 02:03
0

Eu usaria Perl ao invés de sed:

perl -naF'/\|/' -e '$F[2] =~ tr/ /./; print join "|", @F'
  • -n lê a linha de entrada por linha
  • -a divide cada linha no array @F
  • F '/\|/' usa a barra vertical literal como um delimitador ao dividir
  • $F[2] contém a terceira coluna
  • tr é o operador de transliteração, substitui espaços por pontos na terceira coluna
  • join conecta as colunas da matriz de volta (consulte join )
por choroba 23.10.2017 / 00:08