我曾经写过像这样的简单的sed命令
s/==/EQU/
我在命令行中运行它:
sed 's/==/EQU' filename
效果很好,用'EQU'替换'==',但是当我将命令写入名为replace.sed
的脚本文件时,以这种方式运行它:
sed -f replace.sed filename
有错误,说
sed: file replace.sed line 1: unknwon option to 's'
我想问的是我的脚本文件replace.sed在Windows中运行时是否有任何问题?
答案 0 :(得分:3)
在跟踪/
之后,未知选项几乎总是一个流氓字符(从命令行版本中删除,顺便这样它应该抱怨未终止的命令)。
再次看一眼replace.sed
。你最后可能会有一个有趣的角色,如果你忘了删除它,可能包括'
,甚至包括 CTRL-M DOS风格的行结尾,尽管CygWin似乎处理这没关系 - 你还没有指定你正在使用哪个 sed
(这可能有帮助)。
好的,根据您的编辑,看起来我的散点图建议之一是正确的:-)由于CR / LF行结尾,您在行尾有 CTRL-M :
在
*.sed
文件的每一行的末尾,有一个'CR\LF'
对,问题,但默认情况下你看不到它,我用记事本手动删除它们并修复问题。但是我在Windows中编辑新文本文件时没有找到自动删除或不包含'new-line'
样式的方法。
你可能希望得到更强大的编辑器,如Notepad ++或gVim(我最喜欢的),但事实上,你做有一个工具可以摆脱这些字符:-)它被称为sed
。
sed 's/\015//g' replace.sed >replace2.sed
应该删除文件中的所有CR
字符,并为您提供可用于实际工作的replace2.sed
。