LinuxParty

NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado
 

Para extraer valores entrecomillados en Linux puedes hacer...

awk -F '"' '{print $2}'

O a un comando de corte como este:

bash">cut -d'"' -f2

Utilizando sed:

 sed 's/^[^"]*"\([^"]*\)".*/\1/'

Alternativa 1:

SUBSTRING=`echo "$SUBSTRING" | cut -d'"' -f 2`

Alternativa 2:

SUBSTRING=`echo "$SUBSTRING" | awk -F'"' '{print $2}'`

Alternativa 3:

set -f;IFS='"'; SUBSTRING=($SUBSTRING); SUBSTRING=${SUBSTRING[1]};set +f

Usando grep + sed

Esto analizará el contenido de esas 2 cadenas:

$ grep -o '".*"' somefile | sed 's/"//g'
cadena1
cadena2

Lo anterior busca una cadena que coincida con el patrón ".*". Eso coincidirá con cualquier cosa que ocurra entre comillas dobles. Entonces grep devolverá este tipo de valores:

"cadena1"

"cadena2"

La tubería sed eliminará las comillas dobles de estas cadenas y le dará las cadenas que está buscando. La notación sed 's/"//g'indica sedque se debe buscar y reemplazar todas las apariciones de comillas dobles, sustituyéndolas por nada, s/"//g. El comando s/find/replace/g es lo que está pasando allí, y el rastreo g para buscar le dice que lo haga globalmente en toda la cadena que se le da.

Usando solo sed

También puede usar sedpara eliminar las comillas dobles iniciales, conservar lo que hay entre ellas y eliminar las comillas restantes + todo lo que sigue:

$ sed 's/^"\(.*\)".*/\1/' a
arch
arch2

Otros metodos

$ grep -o '".*"' somefile | tr -d '"'
arch
arch2

El comando trse puede utilizar para eliminar caracteres. En este caso, está eliminando las comillas dobles.

$ grep -oP '(?<=").*(?=")' somefile
arch
arch2

Con grepla función PCRE de puede buscar subcadenas que comiencen con comillas dobles o terminen con comillas dobles e informar solo la subcadena.

Con sedusted puede hacer:

var=$(VBoxManage list vms | sed 's/^"\([^"]*\).*/\1/')

Explicación:

  • s/.../.../- emparejar y reemplazar
  • ^- coincidencia al comienzo de la línea
  • \(...\)- esta es una referencia anterior, podemos referirnos a lo que se compara aquí más adelante con
    \1
  • [^"]*- coincide con cualquier secuencia que no contenga un "(es decir, hasta el siguiente ")
  • .*- emparejar el resto de la línea
  • \1- reemplazar con la referencia posterior

O con awk:

var=$(VBoxManage list vms | awk -F\" '{ print $2 }')

Code:

awk -F\" '{print $(NF-1)}'

Example: Code:

$ echo 'user_pref("mail.server.server15.realhostname", "mail24b.someplace.net");' | awk -F\" '{print $(NF-1)}'
mail24b.someplace.net

Contar los valores de una cadena. En este ejemplo contamos en número de espacios...

awk -v RS="(.)" 'RT ~ / /{conteo++}END{print conteo}' <<< ' uno dos tres '

Un pequeño ejemplo práctico

[javier@localhost ~]$  
[javier@localhost ~]$ var="1234567890 123456789"
[javier@localhost ~]$ # Lo primero que hacemos es contarlos espacios.
[javier@localhost ~]$ 
[javier@localhost ~]$ awk -v RS="(.)" 'RT ~ / /{conteo++}END{print conteo}' <<< $var 
1 [javier@localhost ~]$   [javier@localhost ~]$ # Ahora vamos a medir el número de caracteres [javier@localhost ~]$ # [javier@localhost ~]$ echo ${#var}                                                   
20 [javier@localhost ~]$   [javier@localhost ~]$ # Así podemos saber el número de caracteres y si contiene un espacio. [javier@localhost ~]$

No estás registrado para postear comentarios



Redes:



   

 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías