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
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.
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
Tags sed linux scripting shell-script