1

我正在尝试使用命令行解析一些文本文件。其中一部分涉及在一些格式错误的电子邮件中重新附加损坏的单词。一个例子:

9,650 330,765.0  16.38% NYSE (000) 1,707,915 272,099.0  18.95%     Commodit=
ies Close Change % Change Crude Oil (Feb) 19.62 0.32  1.66% Heating Oil (Ja=

我想抢“商品”。我正在使用此解决方法来 sed 完成工作。

我正在使用 Mac OS X 10.7 和 GNU sed 4.2.1 版。如果在命令行我输入

sed ':a;N;$!ba;s/=\r\n//g' ./filename

sed 工作正常。但是,如果我运行这个 bash 脚本:

#!/bin/bash


sed ':a;N;$!ba;s/=\r\n//g' filename

sed 不起作用。但是,相同的脚本可以在 Ubuntu 的命令行下运行:

9,650 330,765.0  16.38% NYSE (000) 1,707,915 272,099.0  18.95%     Commodities Close Change % Change Crude Oil (Feb) 19.62 0.32  1.66% Heating Oil (Jan)

在我的 Mac 上,更简单的脚本

#!/bin/bash


sed 's/=//g' filename

成功删除所有等号。我正在尝试不同的字符组合来反斜杠,但没有太大成功。Mac终端不喜欢什么的任何提示?

4

1 回答 1

0

这很可能是 PATH 设置。/bin/bash 使用默认值$PATH;不知道为什么,但这可能取决于您的正常工作外壳(是那个 bash),或者您的 PATH 设置在哪个点文件中。

OS X 带有它自己的 (BSD) sed,它与 GNU 不同,因此不起作用。运行sed脚本中的命令将选择 BSD sed,而不是您自行安装的 GNU sed。在脚本中使用 sed 的完整路径,或者之前在脚本中设置 $PATH。显然,您在 Ubuntu 上没有问题,因为默认sed是 GNU。

于 2013-01-09T07:47:12.790 回答