2012-05-25 18 views
5

Estoy escribiendo un script bash que ejecutará un comando y almacenará el valor en una variable de cadena, ahora necesito dividir la cadena después de ciertos caracteres. ¿Hay alguna manera? No puedo utilizar delimitadores coz el formato es un poco como estaNecesito dividir una cadena en bash después de cierto número de caracteres

PV Name /dev/sda2 
    PV Size 10.39 GB 

Aquí necesito para obtener el/dev/sda2 y 10.39 GB (si es posible, simplemente 10,39 sola) y escribirlo en un archivo nuevo. No puedo usar delimitador porque el espacio es al principio ... No he hecho mucho scripts bash. ¿Hay alguna forma de hacer esto?

+6

No entiendo su limitación delimitador. ¿No funciona 'awk' {print $ 3} ''? Si no, ¿qué pasa con '$ 4' en lugar de' $ 3'? – mouviciel

Respuesta

6
echo "${var:8}" 

hará eco de los contenidos de $var que empiezan en el carácter 8 (basado en cero).

a quitarse cualquier cosa que empiece en el primer espacio:

data=${var:8} 
echo "${data%% *}" 
3

para obtener sólo ciertos caracteres, utilice cut:

$ echo '1234567' | cut -c2-5 
2345 

Sin embargo, en su caso awk parece mejor opción:

$ echo ' PV Size 10.39 GB' | awk '{ print $3 }' 
10.39 

Se lee texto como espacio/tabula separada ns, lo que debería funcionar perfectamente bien

2

usted podría utilizar cut:

$ echo "PV Name /dev/sda2" |cut -d " " -f 3 
/dev/sda2 
Cuestiones relacionadas