Answers:
您可以sed
为此使用。在BSD上sed
:
echo "foo 'bar'" | sed -E "s/.*'([^']+)'.*/\\1/"
或者,没有-E
选择:
sed "s/.*'\([^']\+\)'.*/\1/"
这不适用于多行输入。为此,您需要:
sed -n "s/.*'\([^']\+\)'.*/\1/p"
( ) +
使用\( \) \+
:这实际上是相同的:sed "s/.*'\([^']\+\)'.*/\1/"
sed -n "s/.*'\([^']\+\)'.*/\1/p"
尽管grep无法输出特定的组,但是您可以使用先行断言和后断言来实现您的目标:
echo "foo 'bar'" | grep -Po "(?<=')[^']+(?=')"
grep -P
并非在所有平台上都可用。但是,如果是这样,则使用先行/后行是解决问题的一种很好的方法。