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 OSX10.7とGNUSedバージョン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と、自己インストールされたGNU sedではなく、BSDsedが取得されます。スクリプトでsedへのフルパスを使用するか、前にスクリプトで$PATHを設定してください。sed明らかに、デフォルトはGNUであるため、Ubuntuでは問題はありません。

于 2013-01-09T07:47:12.790 に答える