1

ちょうど今、二重引用符で囲まれていない文字列を検出する正規表現を探していました。で機能したものに対して素晴らしい答えが得られましたjavascript。実際にgrepを使用して実行しようとしていますが、機能していません。この正規表現が機能しない理由を教えてください

サンプル文字列:"quick" "brown" fox jumps "over" "the" lazy dog

私は実行しようとしています:echo "quick" "brown" fox jumps "over" "the" lazy dog | grep -e '(?<![\S"])([^"\s]+)(?![\S"])'

出力はありません。Linux の正規表現と通常の正規表現の違い。これはどのように行うことができますか?助けてください。このリンクを参照してください: http://regexr.com?31eg3同じ

4

3 に答える 3

3

まず、エコーする文字列全体を引用する必要があります。そうしないと、シェルが二重引用符を取り除きます。次に、perl スタイルの正規表現を使用しているため、オプションとのマッチングにそれらを使用するように grep に指示する必要があり-Pます。

$ echo "quick" "brown" fox jumps "over" "the" lazy dog
quick brown fox jumps over the lazy dog
$ echo "quick" "brown" fox jumps "over" "the" lazy dog | grep -e '(?<![\S"])([^"\s]+)(?![\S"])'
$ echo '"quick" "brown" fox jumps "over" "the" lazy dog' | grep -e '(?<![\S"])([^"\s]+)(?![\S"])'
$ echo '"quick" "brown" fox jumps "over" "the" lazy dog' | grep -P -o -e '(?<![\S"])([^"\s]+)(?![\S"])'
fox
jumps
lazy
dog

ここに を追加-oしたので、何が一致したかは明らかです。

于 2012-07-04T08:46:29.537 に答える
1

の出力を見てくださいecho

$ echo "quick" "brown" fox jumps "over" "the" lazy dog
quick brown fox jumps over the lazy dog

これを試して:

$ echo '"quick" "brown" fox jumps "over" "the" lazy dog'
于 2012-07-04T08:42:59.460 に答える
0

最初の修正として、文字列を一重引用符で囲みます。

echo '"quick" "brown" fox jumps "over" "the" lazy dog'

user@machine:~$ echo '"quick" "brown" fox jumps "over" "the" lazy dog' 
"quick" "brown" fox jumps "over" "the" lazy dog

次に、PERL 互換の正規表現に -P オプションを使用します。

echo '"quick" "brown" fox jumps "over" "the" lazy dog' | grep -P -o '(?<![\S"])([^"\s]+)(?![\S"])'
fox
jumps
lazy
dog

-o ヒントを提供してくれた @lynxlynxlynx に感謝します。

于 2012-07-04T08:42:07.113 に答える