grepのグループマッチングに追加の文字が含まれています。

grepのグループマッチングに追加の文字が含まれています。

Bashで正規表現を使用していくつかのテキストを抽出したかったので、次の簡単な例を試してみることにしました。

echo "abc def ghi" | grep -Po " \K(.*?) "

私は得ることを期待しましたが、驚くべきことに"def""def "最後に余分なスペースがあります)を手に入れました。

grep最後に余分なスペースが含まれている理由とそれを削除する方法に興味があります。別の行を使用して結果を後処理できることはわかっていますが、この問題を解決することに興味があります。

ベストアンサー1

簡単に言うと:

\K

grepがすべてを維持するようにします。以前\K に変換し、一致に含まれません。これは次に何が起こるかに影響しません後ろにこれ\K()

これで十分です。

" \K(.+)(?= )"

(?= )非キャプチャグループはどこにありますか?

またはより良いかもしれません:

" \K([^ ]+)(?= )"
" \K(\w+)(?= )"

または同様です。

おすすめ記事