sedがコマンドラインから実行されるかシェルスクリプトから実行されるかによって、sedの動作が異なるのはなぜですか?ここでは基本的な例だ:シェルスクリプトでsedの動作が異なるのはなぜですか?
$ cat test.txt
foo
bar
baz
$ sed -e 's/^b\(\w*\)$/q\1/g' test.txt # works as intended
foo
qar
qaz
$ cat test.sh # The exact same command
sed -e 's/^b\(\w*\)$/q\1/g' test.txt
$ bash test.sh
foo
bar
baz
を今、私はさらにこれに見るように、\w
は、POSIX正規表現の文字クラス(でも-E
フラグ付き)標準BREかEREではありません。これは、シェルスクリプトからコマンドを実行するときに動作しない、REsに対するPerlのようなGNU拡張のようなものです。実際、\w
をPOSIX [[:alnum:]]
に変更すると、私の意図通りに機能します。 GNU拡張は、シェルスクリプト(大文字/小文字の\U
と\L
を含む)からは機能しないようです。だからsed
シェルスクリプトから実行しているかどうかを検出し、厳密なPOSIX専用モードを入力しようとしますか?これに関する文書はありますか?この動作を無効にすることはできますか?
(これはgsed (GNU sed) 4.2.2
ある)
は再生できません。 MSYSを使用するWindows 10&sed 4.2.2&あなたのテストデータ。コマンドラインやシェルから適切な結果が得られます。 –
うわー、私は矛盾を見つけました。長い間、私は '〜/ .bash_profile'で' gsed 'に 'sed'のエイリアスを付けました。私は以前に 'sed'を確認していたが、 'type sed'を再確認しなかった。 –