eu tenho a entrada
bmb/eng/case.bmb
e a saída deve ser como:
bmb/case.bmb
bmx/eng/case.bmx
O comando que estou usando aqui é
$ echo bmb/eng/case.bmb | sed -E 's/.*/& &/;:a;s/([^ ]* [^\n]*)(bm)b/\1\2x/;ta;s~/~&eng&~2'
bmb/eng/eng/case.bmb bmx/eng/case.bmx
Eu amarrei a modificação do comando acima de várias maneiras, mas não estou obtendo a saída esperada.
Primeiro, é mais fácil fazer uma coisa de cada vez, então copie sua linha no espaço de retenção com
h
, modifique a linha para produzir a primeira linha de saída,p
imprima-a e restaure a linha de salvamento comg
e modifique-a para produzir a segunda linha de saída .Isso permite que você tenha substituições muito simples, como
s/eng./&/
na primeira parte, ous_/.*/__
o diretório pode ter qualquer nome ou pode ser central do que uma hierarquia. E um simpless/bmb/bmx/
para a segunda linha.produz a saída desejada.
Você pode usar o espaço de espera como a área de transferência do seu processador de texto. É uma ferramenta extremamente versátil e fácil de usar e uma pena, que muitos
sed
usuários não usam seu poder.