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

Befehlszeile:Substring aus der Ausgabe extrahieren

$ echo "Watermelons and cucumbers" | cut -d ' ' -f 3
cucumbers

Der -d ' ' sagt cut auf Leerzeichen aufteilen. -f 3 wählt die dritte Spalte aus.

Sie können auch awk verwenden , der die Aufteilung bereits nach Leerzeichen durchführt und die Spalten als $1 verfügbar macht , $2 , …

$ echo "Watermelons and cucumbers" | awk '{ print $3 }'
cucumbers

Ich würde wahrscheinlich eine der bereits von @slhck gegebenen Optionen verwenden, aber hier sind ein paar weitere Möglichkeiten, dies zu tun:

  1. Verwendung von Arrays, wie Sie es in jeder anderen Sprache tun würden:

    $ foo=( $(SayStuff) ) 
    $ echo ${foo[2]}
    cucumbers
    

    Die var=() deklariert ein Array, $(command) speichert die Ausgabe des Befehls. Also foo=( $(SayStuff) ) speichert die Ausgabe von SayStuff in das Array foo und Sie dann echo es ist das dritte Element mit ${foo[2]} .

  2. sed

    $ SayStuff | sed 's/.* \(.*\)/\1/'
    cucumbers
    

    Die sed Befehl ersetzt (s/// ) alles mit dem letzten Wort. Die Regex passt alles bis auf ein Leerzeichen (.* ), der alles bis zum letzten Leerzeichen abgleicht und dann das letzte Wort (\(.*\) erfasst . Da das Wort erfasst wurde, können wir es als \1 bezeichnen .

    Eine einfachere Version:

    $ SayStuff | sed 's/.* //'
    cucumbers
    
  3. bash

    $ foo=$(SayStuff); echo ${foo##* } 
    cucumbers
    

    Dies nutzt die String-Manipulationsfähigkeiten von Bash, siehe hier für weitere Details.

  4. Mehr Bash

    $ SayStuff | while read a b c; do echo $c; done
    cucumbers
    
  5. Perl, wo es natürlich viele Möglichkeiten gibt, dies zu tun:

    $ SayStuff | perl -lane 'print $F[$#F]'
    cucumber
    

    Die -a macht perl verhalten sich wie awk , Zeilen an Leerzeichen aufteilen und in das Array @F speichern . Wir drucken dann das letzte Element von @F ($#F ist die Anzahl der Elemente in @F ). Die -l weist Perl an, jedem print einen Zeilenumbruch hinzuzufügen -Anweisung, die -n dass es STDIN zeilenweise verarbeiten soll und -e dass es das auf der Kommandozeile angegebene Skript ausführen soll.

    $ SayStuff | perl -pe 's/.* //'
    cucumber
    

    Die Optionen wurden oben erklärt, wir löschen einfach alles bis zum letzten Leerzeichen und drucken (-p ).

    $ perl -le 'print $ARGV[$#ARGV]' $(SayStuff)
    cucumbers
    

    Hier übergeben wir Watermelons and cucumbers als Argumente, die Perl im @ARG speichert array und so drucken wir das letzte Element von @ARG .

  6. Trickserei. Dieser verwendet sed um Leerzeichen in Zeilenumbrüche umzuwandeln und dann tail um nur die letzte Zeile zu drucken.

    $ SayStuff | sed 's/ /\n/g' | tail -n 1
    cucumbers
    
  7. grep und reguläre Ausdrücke mit -o die nur die passende Zeichenfolge ausgibt.

    $ SayStuff | grep -Po '\w+$' 
    cucumbers
    
  8. Betrug

    $ SayStuff | grep -o cucumbers
    cucumbers
    

Hier ist eine weitere Erklärung:

Usage: cut OPTION... [FILE]...

Print selected parts of lines from each FILE to standard output.

   -d, --delimiter=DELIM
          use DELIM instead of TAB for field delimiter

   -f, --fields=LIST
          select only these fields;  also print any line that contains  no
          delimiter character, unless the -s option is specified

Wenn Sie also das 3. Feld benötigen und es durch Leerzeichen ' ' getrennt ist, dann ist es

$ echo "Watermelons and cucumbers" | cut -d ' ' -f 3  
cucumbers

Wenn Sie das LETZTE wollen Feld sollten Sie wahrscheinlich awk verwenden .
In diesem Fall wird es:

$ echo "Wassermelonen und Gurken" | awk '{ drucke $NF }'
Gurken

In awk NF ist die Anzahl der Felder in der Zeile, also $NF bedeutet das letzte Feld in der Zeile.


Linux
  1. Linux – Wie kann man das Pulsaudio-Ausgabegerät robust von der Befehlszeile aus wechseln?

  2. Suchen Sie die WordPress-Version über die Befehlszeile

  3. Wie extrahiere ich die Dauer aus der ffmpeg-Ausgabe?

  4. Auslassen der ersten Zeile in jeder Linux-Befehlsausgabe

  5. Ausführen eines Linux-Befehls von Python

Programmieren Sie Hardware über die Linux-Befehlszeile

So extrahieren oder entpacken Sie tar.gz-Dateien von der Linux-Befehlszeile

Suchen Sie Amazon-Produkte über die Befehlszeile

So extrahieren Sie die Tar.xz-Datei in der Linux-Befehlszeile

Wie ändere ich die Audioausgabe von der Befehlszeile auf HDMI?

Senden Sie E-Mail in Linux von der Befehlszeile aus