Bashで正規表現を使用していくつかのテキストを抽出したかったので、次の簡単な例を試してみることにしました。
echo "abc def ghi" | grep -Po " \K(.*?) "
私は得ることを期待しましたが、驚くべきことに"def"
("def "
最後に余分なスペースがあります)を手に入れました。
grep
最後に余分なスペースが含まれている理由とそれを削除する方法に興味があります。別の行を使用して結果を後処理できることはわかっていますが、この問題を解決することに興味があります。
ベストアンサー1
簡単に言うと:
\K
grepがすべてを維持するようにします。以前\K に変換し、一致に含まれません。これは次に何が起こるかに影響しません後ろにこれ\K()
。
これで十分です。
" \K(.+)(?= )"
(?= )
非キャプチャグループはどこにありますか?
またはより良いかもしれません:
" \K([^ ]+)(?= )"
" \K(\w+)(?= )"
または同様です。