GNU/Linux >> Tutoriels Linux >  >> Linux

Ligne de commande :Extraire la sous-chaîne de la sortie

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

Le -d ' ' dit cut diviser sur les espaces. -f 3 sélectionne la troisième colonne.

Vous pouvez également utiliser awk , qui effectue déjà le fractionnement en fonction de l'espace et rend les colonnes disponibles en tant que $1 , $2 , …

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

J'utiliserais probablement l'une des options déjà proposées par @slhck, mais voici quelques autres façons de procéder :

  1. Utiliser des tableaux, comme vous le feriez dans n'importe quel autre langage :

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

    Le var=() déclare un tableau, $(command) enregistre la sortie de la commande. Donc, foo=( $(SayStuff) ) stocke la sortie de SayStuff dans le tableau foo et toi alors echo c'est le troisième élément avec ${foo[2]} .

  2. sed

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

    Le sed la commande remplacera (s/// ) tout avec le dernier mot. L'expression régulière correspond à n'importe quoi jusqu'à un espace (.* ) qui correspondra à tout jusqu'au dernier espace puis capture le dernier mot (\(.*\) . Puisque le mot a été capturé, nous pouvons nous y référer comme \1 .

    Une version simplifiée :

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

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

    Cela utilise les capacités de manipulation de chaînes de bash, voir ici pour plus de détails.

  4. Plus de bas

    $ SayStuff | while read a b c; do echo $c; done
    cucumbers
    
  5. Perl, où bien sûr, il y a plusieurs façons de le faire :

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

    Le -a fait perl se comporte comme awk , divisant les lignes au niveau des espaces et enregistrant dans le tableau @F . Nous imprimons ensuite le dernier élément de @F ($#F est le nombre d'éléments dans @F ). Le -l dit à perl d'ajouter une nouvelle ligne à chaque print déclaration, le -n qu'il doit traiter STDIN ligne par ligne et -e qu'il doit exécuter le script donné à la ligne de commande.

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

    Les options ont été expliquées ci-dessus, nous supprimons simplement tout jusqu'au dernier espace et imprimons (-p ).

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

    Ici nous passons Watermelons and cucumbers comme arguments, que perl enregistrera dans le @ARG tableau et ainsi, nous imprimons le dernier élément de @ARG .

  6. tromperie. Celui-ci utilise sed pour convertir les espaces en nouvelles lignes puis tail pour n'imprimer que la dernière ligne.

    $ SayStuff | sed 's/ /\n/g' | tail -n 1
    cucumbers
    
  7. grep et expressions régulières, en utilisant -o qui imprime uniquement la chaîne correspondante.

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

    $ SayStuff | grep -o cucumbers
    cucumbers
    

Voici quelques explications supplémentaires :

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

Donc si vous avez besoin du 3ème champ et qu'il est délimité par des espaces ' ' alors c'est le cas

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

Si vous voulez le DERNIER champ, vous devriez probablement utiliser awk .
Dans ce cas, cela devient :

$ echo "Pastèques et concombres" | awk '{ print $NF }'
concombres

En awk NF est le nombre de champs dans la ligne donc $NF signifie le dernier champ de la ligne.


Linux
  1. Linux - Comment basculer de manière robuste le périphérique de sortie Pulseaudio à partir de la ligne de commande ?

  2. Trouver la version de WordPress à partir de la ligne de commande

  3. Omettre la première ligne de toute sortie de commande Linux

  4. matlab exécute le script à partir de la ligne de commande linux

  5. Ajouter un saut de ligne à la sortie de la commande

Programmer le matériel à partir de la ligne de commande Linux

Comment extraire ou décompresser des fichiers tar.gz à partir de la ligne de commande Linux

Rechercher des produits Amazon à partir de la ligne de commande

Comment extraire le fichier Tar.xz sur la ligne de commande Linux

Envoyer un e-mail sous Linux à partir de la ligne de commande

Diviser la vidéo MPEG à partir de la ligne de commande ?