2017-05-30 69 views
-1

我有一个文件,我需要使用sed来处理它。
命令在终端和脚本中有不同的操作

这是我的命令:sed -i -e '/.*tour\.html\|.*Thumb[^\/]*\.jpg/!d'

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

#!/bin/bash 

sed -i -e '/.*tour\.html\|.*Thumb[^\/]*\.jpg/!d' "$1" 

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

我的电脑是Mac OS。

+0

在这两种情况下显示'sed --version'和'sed --help'(-i部分)的输出。 – Yunnosch

+0

@Yunnosch我在终端执行'sed --version',我得到了一些信息,而我在脚本中编写了'sed --version'并执行这个脚本,出现错误:'sed:illegal option - -' 。那意味着我有两种'sed'? – Yves

+0

^^是的,你可能已经安装了2份'sed'。根据你的'PATH'变量,'bash'在两种情况下选择不同的。在两种情况下检查'which sed'的输出。 – anishsane

回答

0

据我所知,得到两个sed实例的输出sed --helpsed --version表明您实际上有两个不同的sed版本对执行代码的两种不同方式做出反应。

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

例如,我知道-i交换机的一个重要区别,在某些Mac版本需要明确给出备份的文件扩展名。其他人可以选择。这种差异可以解释为什么涉及-i没有备份扩展的某些事件在一种情况下工作而在另一种情况下失败。

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

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