sed: movendo elementos em uma linha ao redor

0

Então, quero fazer algo assim em Perl:

if (/number=[0-9]*;/){ print "$&$'$'";}

Isso é possível em sed? Ou seja, quero isolar uma parte de uma linha e movê-la do meio para a frente.

    
por John Verghese 09.03.2017 / 15:43

2 respostas

1
sed 's/\(.*\)\(number=[0-9]*;\)//'

No entanto, se houvesse várias ocorrências de number[0-9]*; , isso moveria o último (por causa do ganancioso .* ). Para mover o primeiro:

sed -ne 's/number=[0-9]*;/\
&\
/; s/\(.*\)\n\(.*\)\n//p'

Ou seja, não use .* , mas envolva a ocorrência (primeira vez) do padrão dentro de caracteres de nova linha (o único caractere que não pode ocorrer no espaço de padrão), o que torna a correspondência identificável unicamente na próxima s command.

Isso assume que a entrada é um texto válido (em particular, que não há sequências de bytes que não formam caracteres válidos).

Você também pode usar perl na linha de comando como:

 perl -pe 'if (/number=[0-9]*;/) {$_ = "$&$'$'"}'

Ou

 perl -pe 's/(.*?)(number=[0-9])/$2$1/'
    
por 09.03.2017 / 15:58
0
sed -ne 's/number=[0-9]*;/\n&\n/; s/\(.*\)\n\(.*\)\n\(.*\)//p'
    
por 09.03.2017 / 15:49

Tags