GNU/Linux >> Tutoriels Linux >  >> Linux

GNU Grep peut-il générer un groupe sélectionné ?

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.


Linux
  1. Correspondance de modèle multiligne à l'aide de Sed, Awk ou Grep ?

  2. Comment mettre en surbrillance un mot dans la sortie de "cat" ? ?

  3. Limiter la sortie de recherche et éviter le signal 13 ?

  4. Extraire la sous-chaîne selon Regexp avec Sed ou Grep ?

  5. Comment grep avec la sortie couleur

Coloriser la sortie de queue avec Sed ?

Capturer des groupes avec Awk ou Grep ?

Comment puis-je exclure des répertoires de grep -R ?

grep :capture de groupe

Comment puis-je boucler sur la sortie d'une commande shell ?

Comment grep ps sortie avec des en-têtes