GNU/Linux >> Tutoriales Linux >  >> Linux

Línea de comando:Extraer subcadena de la salida

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

El -d ' ' le dice a cut dividir en espacios. -f 3 selecciona la tercera columna.

También puedes usar awk , que ya realiza la división en función del espacio y hace que las columnas estén disponibles como $1 , $2 , …

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

Probablemente usaría una de las opciones ya proporcionadas por @slhck, pero aquí hay algunas formas más de hacerlo:

  1. Usando matrices, como lo haría en cualquier otro idioma:

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

    El var=() declara una matriz, $(command) guarda la salida del comando. Entonces, foo=( $(SayStuff) ) almacena la salida de SayStuff en la matriz foo y tú entonces echo es el tercer elemento con ${foo[2]} .

  2. sed

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

    El sed el comando sustituirá (s/// ) todo con la última palabra. La expresión regular coincide con cualquier cosa hasta un espacio (.* ) que hará coincidir todo hasta el último espacio y luego capturará la última palabra (\(.*\) . Dado que la palabra ha sido capturada, podemos referirnos a ella como \1 .

    Una versión más simple:

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

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

    Esto usa las habilidades de manipulación de cadenas de bash, mira aquí para más detalles.

  4. Más fiesta

    $ SayStuff | while read a b c; do echo $c; done
    cucumbers
    
  5. Perl, donde, por supuesto, hay muchas formas de hacerlo:

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

    El -a hace perl comportarse como awk , dividiendo líneas en espacios en blanco y guardando en la matriz @F . Luego imprimimos el último elemento de @F ($#F es el número de elementos en @F ). El -l le dice a perl que agregue una nueva línea a cada print declaración, el -n que debe procesar STDIN línea por línea y -e que debe ejecutar el script dado en la línea de comando.

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

    Las opciones se explicaron anteriormente, solo estamos eliminando todo hasta el último espacio e imprimiendo (-p ).

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

    Aquí estamos pasando Watermelons and cucumbers como argumentos, que perl guardará en el @ARG matriz y así, imprimimos el último elemento de @ARG .

  6. astucia. Este usa sed para convertir espacios en saltos de línea y luego tail para imprimir solo la última línea.

    $ SayStuff | sed 's/ /\n/g' | tail -n 1
    cucumbers
    
  7. grep y expresiones regulares, usando -o que imprime solo la cadena coincidente.

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

    $ SayStuff | grep -o cucumbers
    cucumbers
    

Aquí hay más explicaciones:

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

Entonces, si necesita el tercer campo y está delimitado por espacios ' ', entonces es

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

Si quieres el ÚLTIMO campo que probablemente debería usar awk .
En este caso se convierte en:

$ echo "Sandías y pepinos" | awk '{imprimir $NF}'
pepinos

En awk NF es el número de campos en la línea por lo que $NF significa el último campo en la línea.


Linux
  1. Linux:¿cómo cambiar de forma robusta el dispositivo de salida Pulseaudio desde la línea de comandos?

  2. Encuentra la versión de WordPress desde la línea de comandos

  3. Ejecutando un comando de linux desde python

  4. descargar imágenes de google con línea de comando

  5. matlab ejecuta el script desde la línea de comando de Linux

Programe hardware desde la línea de comandos de Linux

Cómo extraer o descomprimir archivos tar.gz desde la línea de comandos de Linux

Buscar productos de Amazon desde la línea de comandos

Cómo extraer el archivo Tar.xz en la línea de comandos de Linux

Enviar correo electrónico en Linux desde la línea de comandos

Obtenga la primera línea de la salida de un comando de shell