GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Kann GNU Grep eine ausgewählte Gruppe ausgeben?

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.


Linux
  1. Kann Sed Zeilenumbrüche ersetzen?

  2. Wie starte ich Multithread-Grep im Terminal?

  3. Substring nach Regexp mit Sed oder Grep extrahieren?

  4. Wie kann man verhindern, dass sed puffert?

  5. Wie kann ich Verzeichnisse von grep -R ausschließen?

Wie kann ich die Ausgabe von grep an cp weiterleiten?

Wie kann ich eindeutige Ergebnisse aus der grep-Ausgabe herausfiltern?

Wie kann ich ls nach Besitzer und Gruppe sortieren?

grep-Ausgabe von lang nach breit

Wie kann ich die Ausgabe von du -h nach Größe sortieren?

So grep ps-Ausgabe mit Headern