2017-05-30 21 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" 

このスクリプトは、ファイル内のすべての行を削除します。

私のPCはMac OSです。

+0

どちらの場合でも、 'sed --version'と' sed --help'(-iの部分)の出力を表示します。 – Yunnosch

+0

@Yunnosch私は端末で 'sed --version'を実行します。私は' sed --version'をスクリプトに書いてこのスクリプトを実行するのに対し、いくつかの情報を持っています。 'sed:illegal option - -' 。だから私は2種類の「sed」を持っているということですか? – Yves

+0

^^はい、おそらく 'sed'の2つのコピーがインストールされています。あなたの 'PATH'変数に基づいて、' bash'は2つのケースで異なるものを選んでいます。どちらの場合でも 'sed'の出力を確認してください。 – anishsane

答えて

0

sed --helpsed --versionの両方のsedインスタンス出力を取得することで、コードを実行する2つの異なる方法に実際に対応する2つの異なるsedバージョンがあることがわかりました。

Sedは、特にコマンドラインオプションについては、構文に関して少し矛盾しています。

例えば、私はいくつかのMac版で明示的に指定されているバックアップ用ファイル拡張子が必要です-iスイッチ、のための重要な違いを知っています。他のものは、を任意にとすることができる。この違いは、バックアップ拡張子なしで-iを含むsomethignが1つのケースで動作し、別のケースで失敗する理由を説明します。

Anishsaneは、異なる「PATH」変数が、2つの異なるsedバージョンを実行するメカニズムの一部となる可能性があることを示唆しました。

私はこの回答に--helpとの出力を編集してください(可能であれば、両方のsedインスタンスのバージョンを取得する方法が必要です)。私は実際にその詳細を持っていません。この答えは少し "推測"のように見えます。

関連する問題