繁体   English   中英

在Mac OS X上的.sh文件中使用sed

[英]Using sed in a .sh file on Mac OS X

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

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=

我想抢“商品”。 我正在使用这种解决方法来完成任务。

我正在使用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终端不喜欢什么?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM