在 Windows 中搜索并将反斜杠替换为正斜杠

在 Windows 中搜索并将反斜杠替换为正斜杠

最近我需要从我的版本控制系统中删除新的未跟踪文件。在 Linux 中我使用:

hg status -un|xargs rm

效果很好,但在 Windows 中执行时,hg status会列出带有反斜杠的路径,因此会出现问题。因此我尝试:

hg status -un|sed 's/\\/\//g'

...但我收到了错误:sed:-e 表达式 #1,字符 8:未终止的“s”命令

然后我尝试一些 ascii:

`hg status -un|sed 's/\o134/\o57/g'` 

...这让我:sed:-e 表达式 #1,字符 14:尾随反斜杠

还有一些脚本:

hg status -un|sed 's/`echo \`/`echo /`/g'

...这让我:sed:-e 表达式 #1,字符 19:'s' 的未知选项

我尝试了最后一个字符,并得到了预期的输出……所以我完全迷失了。当然,我有 cygwin,我想避免使用文件(这就是我一直在做的)。

提前致谢

答案1

duke!你做错了!你可以使用:而不是/正则表达式:

hg status -un|sed 's:\\:/:g'

*捂脸*

答案2

为了避免“尾随反斜杠”错误,您应该确保不要删除最后一个反斜杠。这可以通过在正则表达式中确保另一个“非”反斜杠字符始终跟在被替换的字符后面来实现。sed 应该看起来像这样......

sed "s:\\([^\]\+\):/\1:g"

..大致翻译如下:

找到一个反斜杠,后面跟着至少 1 个非反斜杠字符,然后将其替换为正斜杠,后面跟着其他匹配的字符。

请注意,在我的正则表达式(用于 bash)中,我不需要转义反斜杠,但需要转义圆括号。'\1' 是反向引用。

希望这是有意义的!

相关内容