Regex 如何更换<&燃气轮机;windows中cmd脚本中带有sed的字符?它们被解释为重定向操作符

Regex 如何更换<&燃气轮机;windows中cmd脚本中带有sed的字符?它们被解释为重定向操作符,regex,sed,cmd,Regex,Sed,Cmd,我想从许多小的html文件中创建一个大的html文件。它们只使用基本标记(h1-h4、p、br、hr、span),所有标记都是手动编写的。评论只出现在2或3个地方 我想要的:我想要使用sed(cygwin)将字符串替换为某物(例如,qwerty)。为了理解错误,我将命令简化为以下内容(以.cmd文件编写): (什么事也没有发生) (结果是——但我不需要尖括号) 选项-r、-z、-e在任何组合中都没有区别 我还不熟悉*nix脚本,所以我不想去那里 PS:我用sed做了很多其他的事情,它很有效——它

我想从许多小的html文件中创建一个大的html文件。它们只使用基本标记(h1-h4、p、br、hr、span),所有标记都是手动编写的。评论只出现在2或3个地方

我想要的:我想要使用sed(cygwin)将字符串
替换为某物(例如,qwerty)。为了理解错误,我将命令简化为以下内容(以.cmd文件编写):

(什么事也没有发生)

(结果是
——但我不需要尖括号)

选项-r、-z、-e在任何组合中都没有区别

我还不熟悉*nix脚本,所以我不想去那里

PS:我用sed做了很多其他的事情,它很有效——它只是用尖括号(或者Windows/cmd)卡住了

示例文件:

bla1 bla2

<!--css-->

bla3 bla4
bla1 bla2
bla3 bla4
使用如下文件:

$ cat file.txt
bla1 bla2

<!--css-->

bla3 bla4
e:\tmp>sed -rz 's,^<\!--css--^>,qwerty,g' file.txt
bla1 bla2

qwerty

bla3 bla4

@Tiw让我明白了这件可憎的事。Tnx;)

不幸的是,命令提示符(无论操作系统如何)不是一个选项—在我当前的任务中不是

这些方法不起作用:

sed.exe -i -r "s,<!--css-->,qwerty,g" outfile
sed.exe -i -r "s,^<!--css--^>,qwerty,g" outfile
sed.exe-i-r“s,,qwerty,g”输出文件
sed.exe-i-r“s,^,qwerty,g”输出文件
还包括:

sed.exe -i -r "s,^<^!--css--^>,qwerty,g" outfile
sed.exe-i-r“s,^,qwerty,g”输出文件
因此,罪魁祸首是感叹号!难以置信


谢谢大家。

如果你不能完全摆脱Windows,一个常见的解决方法是将你的
sed
脚本放在一个文件中,并使用
sed-f文件名运行它。
^
就是这样做的。如果你在命令提示下,使用双qote而不是
@tripleee:我想到了,但是我的自我试图避免太多的文件,谢谢
^
是cmd.exe.Wait中的转义字符,那么你是如何运行代码的呢?使用bash或cmd?环境:Windows 7 Enterpise、64位、SP1、.cmd文件,并带有多个命令,其中一个命令是此替换命令。我只需在记事本++中编辑.cmd文件(我认为与此无关),然后在cmd.exe窗口中运行它。至于原因,我不知道-我只是注意到了结果。在
cmd
中,启用后,感叹号会成为一种特殊的含义,必须转义(
^!
,如果介于
,或者
^!
之间),才能被视为文字字符…@aschipfl:你说得对,由于脚本的其余部分,我启用了延迟扩展。你的解释现在完全有道理了。不幸的是,我不能向任何人伸出大拇指。。。不是,只是为了执行
sed.exe
命令行(
setlocal DisableDelayedExpansion
before,
endlocal
after)而禁用延迟扩展怎么样?或者您是否需要它(例如,它被放置在一个代码块中,并接收在其中设置的变量)?irz不能按原样工作,但我知道这个概念。在这种特殊情况下,
rz
被视为
-i
的后缀。我有一段时间不知道为什么要复制我的文件,有些文件以
rz
结尾。否则,正如前面提到的,@virolino Ahh。。。是的,应该是
-zri
。最后一个位置的
i
。谢谢你提出这一点:)我正是这么想的(zri),但我太懒了,没有测试:D
> sed -r -z "s,<!--css-->,qwerty,g" file.txt
bla1 bla2

qwerty

bla3 bla4
$ sed -r -z "s,<\!--css-->,qwerty,g" file.txt
bla1 bla2

qwerty

bla3 bla4
sed -r -z "s,<\!--css-->,qwerty,g"
e:\tmp>sed -rz 's,^<\!--css--^>,qwerty,g' file.txt
bla1 bla2

qwerty

bla3 bla4
sed.exe -i -r "s,<!--css-->,qwerty,g" outfile
sed.exe -i -r "s,^<!--css--^>,qwerty,g" outfile
sed.exe -i -r "s,<^!--css-->,qwerty,g" outfile
sed.exe -i -r "s,^<^!--css--^>,qwerty,g" outfile