Use sed e sed sozinho para fazer uma substituição em uma linha que começa com uma string específica somente se existir

0

O título é um pouco incerto, deve ser explicado mais facilmente:

Isto é o que eu esperava trabalhar com o sed, mas sem dados até agora:

sed '/^command=/ /\/opt\/home\/user/!s@/home/user/@/opt/home/user/@' authorized_keys

Observe que o @ é apenas um delimitador engraçado que escolhi para a substituição para visualizar mais facilmente as barras.

Basicamente, o que eu quero que o regex seja: "Em qualquer linha no arquivo que comece com a string: command = então se a string: / opt / home / user não existir, substitua / opt / user por / opt / home / user "

Eu sei que eu poderia, teoricamente, fazer isso com declarações if, greps e sed, mas isso não parece elegante para mim. Eu tenho certeza que o sed pode fazer isso sozinho em um regex de um liner, mas qualquer combinação que eu tentei parece me dar todos os tipos de erros de sintaxe. Curiosamente, as expressões regex usadas individualmente não fornecem erros de sintaxe quando combinadas com a substituição, somente quando tento combiná-las eu tenho problemas.

Alguém tem uma maneira mais elegante de fazer isso com sed? Ou eu estava certo em assumir que greps, e se declarações antes do sed são a melhor maneira de fazer isso.

    
por Viscosity 21.09.2016 / 21:43

1 resposta

2

don_crissti aconselhe um solucao elegante nos comentarios mas para fins educacionais outra variante aqui

sed '/^command=/! b; \@/opt/home/user@! s@/home/user@/opt&@' authorized_keys
    
por 21.09.2016 / 23:11