我想将文件路径替换为其他使用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