终端和脚本中的命令有不同的动作

时间:2017-05-30 11:28:38

标签: bash shell sed

我有一个文件,我需要使用:inline来处理它。

这是我的命令:sed

现在,如果我从终端执行此命令,例如sed -i -e '/.*tour\.html\|.*Thumb[^\/]*\.jpg/!d',它运行良好。但是如果我用相同的命令编写一个bash脚本,它将删除所有行。

sed -i -e '/.*tour\.html\|.*Thumb[^\/]*\.jpg/!d' myfile.txt

此脚本将删除文件中的所有行。

我的电脑是Mac OS。

1 个答案:

答案 0 :(得分:0)

据我所知,同时获得sed --helpsed --version的sed实例输出显示您实际上有两种不同的sed版本对两种不同的执行代码的方式作出反应。

Sed在语法上有点不一致,特别是涉及命令行选项时。

例如,我知道-i切换的重要区别,在某些Mac版本中需要文件扩展名才能明确指定备份。其他人允许一个可选。这种差异可以解释为什么涉及-i没有备份扩展名的某些签名在一个案例中起作用而在另一个案件中失败。

Anishsane建议不同的“PATH”变量可以反过来成为执行两个不同sed版本的机制的一部分。

我邀请OP编辑--help--version的输出(在可能的情况下,应该有一种方法可以从两个sed实例中获取版本)到这里。我实际上没有这些细节。这使得这个答案看起来有点“猜测”。