sed -n 's/^potato:[[:space:]]*//p' file.txt
Man kann sich Grep als eingeschränktes Sed oder Sed als verallgemeinertes Grep vorstellen. In diesem Fall ist Sed ein gutes, leichtgewichtiges Werkzeug, das tut, was Sie wollen – obwohl es natürlich auch mehrere andere vernünftige Möglichkeiten gibt, dies zu tun.
grep -Po 'potato:\s\K.*' file
-P um einen regulären Perl-Ausdruck zu verwenden
-o um nur die Übereinstimmung auszugeben
\s um mit dem Leerzeichen nach potato: übereinzustimmen
\K um die Übereinstimmung wegzulassen
.* um den Rest der Zeichenfolge(n) abzugleichen
Oder verwenden Sie Regex-Zusicherungen:grep -oP '(?<=potato: ).*' file.txt
grep 'potato:' file.txt | sed 's/^.*: //'
grep sucht nach einer Zeile, die den String potato: enthält , dann für jede dieser Zeilen sed ersetzt (s/// - Ersatz) ein beliebiges Zeichen (.* ) vom Anfang der Zeile (^ ) bis zum letzten Auftreten der Sequenz : (Doppelpunkt gefolgt von Leerzeichen) durch die leere Zeichenfolge (s/...// - Ersetzen Sie den ersten Teil durch den zweiten Teil, der leer ist).
oder
grep 'potato:' file.txt | cut -d\ -f2
Für jede Zeile, die potato: enthält , cut teilt die Zeile in mehrere Felder auf, die durch Leerzeichen getrennt sind (-d\ - d =Trennzeichen, \ =maskiertes Leerzeichen, so etwas wie -d" " hätte auch funktioniert) und das zweite Feld jeder solchen Zeile ausgeben (-f2 ).
oder
grep 'potato:' file.txt | awk '{print $2}'
Für jede Zeile, die potato: enthält , awk druckt das zweite Feld (print $2 ), die standardmäßig durch Leerzeichen getrennt ist.
oder
grep 'potato:' file.txt | perl -e 'for(<>){s/^.*: //;print}'
Alle Zeilen, die potato: enthalten werden an eine Inline gesendet (-e ) Perl-Skript, das alle Zeilen von stdin übernimmt , führt dann für jede dieser Zeilen dieselbe Ersetzung wie im ersten obigen Beispiel durch und gibt sie dann aus.
oder
awk '{if(/potato:/) print $2}' < file.txt
Die Datei wird per stdin gesendet (< file.txt sendet den Inhalt der Datei über stdin zum Befehl auf der linken Seite) zu einem awk Skript, das für jede Zeile, die potato: enthält (if(/potato:/) gibt true zurück, wenn der reguläre Ausdruck /potato:/ entspricht der aktuellen Zeile), druckt das zweite Feld, wie oben beschrieben.
oder
perl -e 'for(<>){/potato:/ && s/^.*: // && print}' < file.txt
Die Datei wird per stdin gesendet (< file.txt , siehe oben) zu einem Perl-Skript, das ähnlich wie das obige funktioniert, diesmal aber auch dafür sorgt, dass jede Zeile den String potato: enthält (/potato:/ ist ein regulärer Ausdruck, der passt, wenn die aktuelle Zeile potato: enthält , und falls ja (&& ), wendet dann den oben beschriebenen regulären Ausdruck an und gibt das Ergebnis aus).