在Windows中使用sed的批处理文件 - 意外添加而不是替换

时间:2011-09-29 11:56:27

标签: batch-file sed gnuwin32

我的任务是将一组批处理脚本迁移到Windows 7(从XP),并且在使用sed进行替换时遇到了一些问题。我需要做的是找到LogPath,双引号内的任何内容都应该用ABC替换(仅用于测试 - 实际上是UNC路径)。

然而,我遇到了两个奇怪的问题:

  • 它正在删除第一个双引号
  • 更重要的是它不是 实际上替换了引号内的任何内容,而只是 附加到此字符串

以下是该脚本的相关行:

sed \\fs-bri-01\9732\9732.hfls -i -e s,LogPath="*.",LogPath="ABC",g

此脚本适用于Windows XP,但不适用于Windows 7.

2 个答案:

答案 0 :(得分:0)

问题可能来自UNC路径:

pushd \\fs-bri-01\9732
sed 9732.fls -i -e s,LogPath="*.",LogPath="ABC",g
popd

但也许问题来自引号字符和sed获取其argv数组的方式。然后你可以尝试:

sed -i -e "s/LogPath=\".*\"/LogPath=\"ABC\"/g" \\fs-bri-01\9732\9732.hfls

答案 1 :(得分:0)

很好地计算了一个工作,将其发布在下面,适用于陷入同样情况的人。

sed \\fs-bri-01\9732\9732.hfls -i -e "s/LogPath=\"[\:A-Z0-9a-z_\\\/\.\ ]*\"/LogPath=\"ABC\"/g"