在shell脚本中使用SED

时间:2015-05-27 16:22:11

标签: shell sed cygwin

我有两个问题需要帮助。我正在使用Cygwin和一个Unix新手。

1)我有一个执行SED命令的shell脚本。在我的名为master.sh的脚本中,我有以下内容

    sed -nrf remove.sed < code.tp4 > code.tp5

remove.sed有一行

    / INCLUDE /d

当我通过以下命令执行脚本时

bash master.sh

我收到以下错误

master.sh: line 12: $'\r':command not found

我不知道是什么引发了这个错误。

2)我的第二个问题是输出文件&#34; code.tp5&#34;最终&#34; code.tp5?&#34;。但是,使用Windows资源管理器时,问号似乎是 不可打印的角色。最令人困惑的部分是,当我通过命令提示符执行此操作时,我没有收到任何错误。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

你可以尝试:

sed -nr s/\r//;/ INCLUDE /d' < code.tp4 > code.tp5; sed 's/$/\r$/' code.tp5

命令's'用于替换。 '\ r'回车。所以s/\r//将把回车换成零。之后,您将删除包含模式'/ INCLUDE / d'的行。并且:sed 's/$/\r$/' code.tp5最后你将再次添加回车符,因此将再次成为DOS文本文件($表示正则表达式的行尾)。 (Unix行结尾只是新行,而DOS cas回车和换行符。)