Vous pouvez utiliser sed
pour ça. Sur BSD sed
:
echo "foo 'bar'" | sed -E "s/.*'([^']+)'.*/\\1/"
Ou, sans le -E
choix :
sed "s/.*'\([^']\+\)'.*/\1/"
Cela ne fonctionne pas pour l'entrée multiligne. Pour cela il vous faut :
sed -n "s/.*'\([^']\+\)'.*/\1/p"
Bien que grep ne puisse pas générer un groupe spécifique, vous pouvez utiliser des assertions en avant et en arrière pour obtenir ce que vous recherchez :
echo "foo 'bar'" | grep -Po "(?<=')[^']+(?=')"
Vous pouvez utiliser \K
pour réinitialiser et supprimer le texte de correspondance de gauche avec une anticipation qui n'est pas ajoutée au texte de correspondance :
$ echo "foo 'bar'" | grep -oP "'\K[^']+(?=')"
bar
GNU grep uniquement.