grepは文字列の正確に2つの部分と一致します。

grepは文字列の正確に2つの部分と一致します。

grepコマンドを使用して次の文字列の一部を取得するには?

ひも:

orange:"orange", red:"apple", purple:"grape", yellow:"banana", green:"watermelon"
red:"strawberries", yellow:"lemon"

私が望むもの:

red:"apple" yellow:"banana"
red:"strawberries" yellow:"lemon"

私はこれを試しました:

grep -oP '(red:\"[^\"]*).*(yellow:\"[^\"]*)'

ベストアンサー1

中間項目は.*すべての項目と一致します。つまり、purple:"grape"部分項目です。代わりに(GNU grepを使い続けると仮定すると)、(foo|bar)「OR」構造を使用して各部分を個別に一致させます。

grep -oP '(red|yellow):\"[^\"]*"'

最後の声明を追加する必要があります"。また、脱出する必要がないので、"次のものを使用できます。

grep -oP '(red|yellow):"[^"]*"'

とにかく、ここにあなたのためのものがあります。

red:"apple"
yellow:"banana"

次に、線の間にスペースを置いて線を接続します。

grep -oP '(red|yellow):"[^"]*"' | paste -sd ' ' -

正直に言うと、自然に代わりsedに使うようになりそうです。

sed -n 's/.*\(red:"[^"]*"\).*\(yellow:"[^"]*"\).*/\1 \2/p'

おすすめ記事