Sie können sed
verwenden dafür. Auf BSD sed
:
echo "foo 'bar'" | sed -E "s/.*'([^']+)'.*/\\1/"
Oder ohne -E
Möglichkeit:
sed "s/.*'\([^']\+\)'.*/\1/"
Dies funktioniert nicht bei mehrzeiliger Eingabe. Dazu benötigen Sie:
sed -n "s/.*'\([^']\+\)'.*/\1/p"
Während grep keine bestimmte Gruppe ausgeben kann, können Sie Lookahead- und Behind-Assertionen verwenden, um das zu erreichen, wonach Sie suchen:
echo "foo 'bar'" | grep -Po "(?<=')[^']+(?=')"
Sie können \K
verwenden zurücksetzen und den linken Übereinstimmungstext zusammen mit einem Lookahead verwerfen, der nicht zum Übereinstimmungstext hinzugefügt wird:
$ echo "foo 'bar'" | grep -oP "'\K[^']+(?=')"
bar
Nur GNU grep.