Puoi usare sed
per questo. Su BSD sed
:
echo "foo 'bar'" | sed -E "s/.*'([^']+)'.*/\\1/"
Oppure, senza il -E
opzione:
sed "s/.*'\([^']\+\)'.*/\1/"
Questo non funziona per l'input su più righe. Per questo hai bisogno di:
sed -n "s/.*'\([^']\+\)'.*/\1/p"
Sebbene grep non possa emettere un gruppo specifico, puoi utilizzare le asserzioni lookahead e behind per ottenere ciò che desideri:
echo "foo 'bar'" | grep -Po "(?<=')[^']+(?=')"
Puoi usare \K
per reimpostare ed eliminare il testo della corrispondenza a sinistra insieme a un lookahead che non viene aggiunto al testo della corrispondenza:
$ echo "foo 'bar'" | grep -oP "'\K[^']+(?=')"
bar
Solo GNU grep.