2008-09-08 15 views

Respuesta

29

Puede utilizar el cut command para llegar a cada uno de los 3 'campos', por ejemplo:

$ echo "system-source-yyyymmdd.dat" | cut -d'-' -f2 
source 

"-d" especifica el delimitador, "-f" especifica el número del campo que requiere

+0

Tengo curiosidad por la razón por la que agregó el prompt #. Normalmente, ese mensaje indica la raíz o superusuario. En general, creo que cosas como probar el comando ** cut ** sería mejor hacerlo como un usuario normal. Hubiera usado el prompt $. –

+0

Oh, sí, buen punto. Debo admitir que estuve conectado como root en el momento y simplemente fui por ello, un mal hábito, lo sé. Habiendo dicho eso, creo que echo y cut son dos de los comandos menos dañinos :) Pero, para completar, ciertamente actualizaré el ejemplo de inmediato. Aclamaciones. –

+0

¿cómo puedo asignar el resultado a una variable? si lo hago 'var =" system-source-yyyymmdd.dat "| cut -d'- '-f2' no funciona. – EsseTi

7

Utilice el comando cut.

p. Ej.

echo "system-source-yyyymmdd.dat" | cut -f1 -d'-' 

extraerá el primer bit.

Cambie el valor del parámetro -f para obtener las piezas adecuadas.

Aquí hay una guía sobre el comando Cut.

8

Dependiendo de sus necesidades, awk es más flexible que el corte. Un primer teaser:

# echo "system-source-yyyymmdd.dat" \ 
    |awk -F- '{printf "System: %s\nSource: %s\nYear: %s\nMonth: %s\nDay: %s\n", 
       $1,$2,substr($3,1,4),substr($3,5,2),substr($3,7,2)}' 
System: system 
Source: source 
Year: yyyy 
Month: mm 
Day: dd 

El problema es que la descripción de awk como 'más flexible' es ciertamente como llamar al iPhone un teléfono celular mejorada ;-)

1

Otro método es el uso de herramientas de análisis internos de la concha, la cual evita el coste de la creación de procesos secundarios:

 
oIFS=$IFS 
IFS=- 
file="system-source-yyyymmdd.dat" 
set $file 
IFS=$oIFS 
echo "Source is $2" 
8

un bonito y elegante (en mi mente :-) utilizando sólo empotrados es ponerlo en una matriz

var='system-source-yyyymmdd.dat' 
parts=(${var//-/ }) 

A continuación, se pueden encontrar las partes de la matriz ...

echo ${parts[0]} ==> system 
echo ${parts[1]} ==> source 
echo ${parts[2]} ==> yyyymmdd.dat 

Advertencia: esto no funcionará si el nombre de archivo contiene caracteres "extraños" como el espacio, o, Dios prohíbe, citas, comillas inversas. ..

Cuestiones relacionadas