Usando sed
com o agrupamento de padrões:
sed -r 's/(.*=)D(:\[^\]+)(\.*)/E/' file.txt
-
Todos os
()
estão indicando grupos de padrões, o objetivo do agrupamento é usá-los na substituição usando apenas\#
reference (substitua#
pelo número do grupo, incrementando de 1, da esquerda para a direita) -
(.*=)
corresponderá à parte anterior à primeiraD
, isso é referenciado como grupo 1, ou seja,na substituição
-
(:\[^\]+)
corresponde até o segundo\
apósD
, isso é -
(\.*)
corresponde a todo o restante após o segundo\
(inclusive), isso é
Exemplo:
$ cat file.txt
Dir=D:\test\foo
Dir=D:\test\bar
$ sed -r 's/(.*=)D(:\[^\]+)(\.*)/E/' file.txt
Dir=E:\test1\foo
Dir=E:\test1\bar
Se você tiver várias ocorrências e quiser substituí-las:
$ cat file.txt
Dir=D:\test\foo Dir=D:\bar\foo
Dir=D:\test\bar
$ sed -r 's/D(:\)[^\]+/Etest1/g' file.txt
Dir=E:\test1\foo Dir=E:\test1\foo
Dir=E:\test1\bar