sed命令不更改文本

时间:2018-04-26 19:35:13

标签: ubuntu sed cygwin

我正在试图找出一种自动更改版本号的方法,为此我有一个尝试读取文件然后更改它的脚本。

\\ students.txt
this is a text, text is not so bad, and more text

我在同一目录中有students.txt和changetext.sh文件。

\\ changetext.sh
sed -i='' "s/, /- /g" students.txt

当我在Windows64位系统上使用Windows 10在Cygwin上运行此命令时,它在控制台上运行良好。但是当我尝试从shell脚本运行此命令时,如上所示,它会出现以下错误。

$ ./changetext.sh
: No such file or directoryt

我不确定是什么问题?有人可以指导我吗?

2 个答案:

答案 0 :(得分:0)

我在我的Cygwin副本上遇到了不同的行为(在Win10下大约6个月),但您对-i的使用不正确。
你想要" -i [空间]"那不是[SPACE],而是文字空间。它会尝试使用=后缀。它可能正在解释''在你的系统上也不同于我的。

啊......如果我在Windows目录中,我会收到错误。我相信它试图生成的任何文件名作为备份文件对于Cygwin是合法的,但不适用于Windows。

如果您想要备份文件,请使用-i~-i.bak或其他内容。

您的脚本的另一个潜在问题是缺少shebang来指定应该使用哪个shell来解释它。 -i=''的奇怪之处也很可能被不同的贝壳解释得不同。 bash shebang是典型的:

What is the preferred Bash shebang?

答案 1 :(得分:0)

好的,我找到了答案。我认为这是Cygwin的问题,因为我在ubuntu操作系统上尝试了相同的脚本,它运行得非常好。

我不确定这个问题,但如果我错了,有人可以纠正我。我尝试使用Ubuntu 16.04并且它有效,但它在使用Cygwin的Windows 10上不起作用。