如何使用 sed 替换包含文件路径的字符串

如何使用 sed 替换包含文件路径的字符串

我想将文件路径替换为其他使用sed。我附加了文件的一小部分请帮忙

源文件 :

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

结果应该是这样的

Dir=E:\test1\foo
Dir=E:\test1\bar

答案1

sed与模式分组一起使用:

sed -r 's/(.*=)D(:\\[^\]+)(\\.*)/\1E\21\3/' file.txt
  • 全部()都表示模式组,分组的目的是为了在替换时使用它们,只需使用\#引用即可(用#组号替换,从 1 开始递增,从左到右)

  • (.*=)将匹配第一个之前的部分D,这被称为第 1 组,即\1替换

  • (:\\[^\]+)匹配到第二\之后D,这是\2

  • (\\.*)匹配第二个之后的所有内容\(包括),这是\3

例子:

$ cat file.txt 
Dir=D:\test\foo
Dir=D:\test\bar

$ sed -r 's/(.*=)D(:\\[^\]+)(\\.*)/\1E\21\3/' file.txt
Dir=E:\test1\foo
Dir=E:\test1\bar

如果有多个出现的情况并且想要全部替换它们:

$ cat file.txt
Dir=D:\test\foo Dir=D:\bar\foo
Dir=D:\test\bar

$ sed -r 's/D(:\\)[^\]+/E\1test1/g' file.txt
Dir=E:\test1\foo Dir=E:\test1\foo
Dir=E:\test1\bar

相关内容