sed - executa múltiplas substituições em uma linha encontrada pela pesquisa de padrões?

3

Eu tenho um arquivo que contém um como este:

name=MOD0

e um monte de linhas extras que eu não estou interessado. Eu preciso transformar essa linha nisso:

[MOD0]

e solte todas as outras linhas do arquivo. A parte MOD0 não é previsível, portanto, preciso corresponder a linha pelo ^ name = pattern. Eu posso executar uma substituição (remover o "nome="), mas como posso dizer ao sed para realizar outra operação (cercar a linha com colchetes), ainda na mesma linha correspondente? O seguinte comando envolve cada linha com colchetes:

sed -n -e '/^name=/ s/^name=//p; s/^.*$/\[&\]/p'
    
por myxal 19.03.2015 / 10:22

1 resposta

4

Use chaves:

sed -n '
   /^name=/ {
     s///p
     s/.*/[&]/p
   }'

Observe que um padrão de pesquisa em branco (como em s///p ) reutiliza o último padrão.

Alternativamente:

 sed '/^name=/!d;s///p;s/.*/[&]/'

(isto é, exclua as linhas que não começam com name= e, em seguida, processe as outras).

Se você quiser apenas substituir o name=xxx por [xxx] sem gerar também xxx , basta fazer:

sed -n 's/^name=\(.*\)/[]/p'

(ou remova o p flag para o primeiro comando s nos outros comandos acima).

    
por 19.03.2015 / 10:29

Tags