2017-04-21 3 views
-1

私はRH6で動作し、4.2.1SEDコードは4.2.1で動作しますが、ない4.1.5

>> echo "SUSE Linux Enterprise Server 11 (x86_64) VERSION = 11 PATCHLEVEL = 2" | sed s/.*VERSION\ =\ // 
11 PATCHLEVEL = 2 
>> sed --version 
GNU sed version 4.2.1 

をsedは以下のsedのコードを持っていますが、それはSUSE 11で失敗し、sedの4.1.5

>> echo "SUSE Linux Enterprise Server 11 (x86_64) VERSION = 11 PATCHLEVEL = 2" | sed s/.*VERSION\ =\ // 
sed: No match. 
>> sed --version 
GNU sed version 4.1.5 

は、私は次のコードは、2つのバージョンが異なる動作を発見しました。 SUSEのsed 4.1.5は何も一致しません。

sedの既知の問題ですか?それには解決策がありますか?

+1

あなたは答えがありますが、私はあなたの症状が不思議です:あなたは本当に 'sed:No match.'を得ましたか?これはSedエラーメッセージのようには見えません。それはおそらく、 'bashのではなかった:一致:S /.* VERSION = //'? 'shopt -s failglob'が起こった場合、_shell_がそのパターンを現在のディレクトリのファイルと照合しようとして失敗したことから、それを得るでしょう。 (引用されていないため)。 – mklement0

答えて

3

アスタリスクを引用していなかったので、シェルはそれをグロブしようとしています。いずれかのシステムでは、このグロビングが失敗し、元の文字列が返されます。あなたの他のシステムではそれが何かを一致させ、あなたの置換正規表現が破壊されます。 常にシェルが "特別な"と考えるかもしれない引数を引用します。

-1

私はsedの4.1.5は、物事を動作させるために、単一引用符を必要としました。以下の作品。

echo ab | sed 's/.*//' 

しかし、sed 4.2.1ではこれは必要ありません。

+2

それはsedはないということは、それをグロブています。それはシェルです。古いシステムでグロブをオフにして、新しいシステムでグロブをオンにしているかもしれません。 – alvits

関連する問題