3
echo "$(expr "title: Purple Haze       artist: Jimi Hendrix" : 'title:\s*\(.*\?\)\s*artist.*' )"

版画

Purple Haze             

?遅延演算子を使用していますが、末尾に空白があります。

https://regex101.com/でこれをテストしましたが、期待どおりに動作します。bash の違いは何ですか?

4

2 に答える 2

6

あなたはbashの正規表現マッチングを使用していませんexpr. expr「<コード>? 遅延演算子」を使用しており、基本的な正規表現のみを実装しています (Linux バージョンでは、空白などの拡張機能がいくつか\sありますが、Perl のような遅延演算子は含まれていません)。(さらに言えば、bash も行いません。)

.*末尾のスペースを含めたくない場合は、スペース以外の文字で終わる必要があることを指定します。

'title:\s*\(.*\S\)\s*artist.*'
于 2015-01-04T15:23:26.840 に答える