sed
を使用できます このため。 BSD sed
で :
echo "foo 'bar'" | sed -E "s/.*'([^']+)'.*/\\1/"
または、-E
なし オプション:
sed "s/.*'\([^']\+\)'.*/\1/"
これは複数行入力では機能しません。そのために必要なもの:
sed -n "s/.*'\([^']\+\)'.*/\1/p"
grep は特定のグループを出力することはできませんが、先読みと背後のアサーションを使用して、次のことを実現できます。
<ブロック引用>
echo "foo 'bar'" | grep -Po "(?<=')[^']+(?=')"
\K
を使用できます 左側の一致テキストを、一致テキストに追加されない先読みとともにリセットして破棄するには:
$ echo "foo 'bar'" | grep -oP "'\K[^']+(?=')"
bar
GNU grep のみ。