我试图用命令行解析一些文本文件。其中一部分涉及在一些格式错误的电子邮件中重新附加破碎的单词。一个例子:
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=
我想抓住'商品'。我正在使用这个workaround来完成工作。
我正在使用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终端不喜欢的任何提示吗?
答案 0 :(得分:0)
这很可能是PATH设置。 /bin/bash
使用默认$PATH
;不知道为什么,但也许这取决于你的正常工作shell(是bash),还是你的PATH设置的点文件。
OS X自带(BSD)sed,与GNU不同,因此不起作用。
在脚本中运行sed
命令将获取BSD sed,而不是自行安装的GNU sed。在脚本中使用sed的完整路径,或者之前在脚本中设置$ PATH。显然,你在Ubuntu上没有问题,因为默认的sed
是GNU。