Como substituir string contendo o caminho do arquivo usando sed

2

Eu quero substituir um caminho de arquivo por outro usando sed . Estou anexando uma pequena parte do meu arquivo Por favor, ajude

arquivo de origem:

Dir=D:\test\foo
Dir=D:\test\bar

o resultado deve ser assim

Dir=E:\test1\foo
Dir=E:\test1\bar
    
por Rooney 18.04.2016 / 10:31

1 resposta

2

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 à primeira D , isso é referenciado como grupo 1, ou seja, na substituição

  • (:\[^\]+) corresponde até o segundo \ após D , 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
    
por heemayl 18.04.2016 / 10:43