que tienen un nombre de archivo en un formato como:¿Cómo se analiza un nombre de archivo en bash?
system-source-yyyymmdd.dat
me gustaría ser capaz de analizar los diferentes bits del nombre de archivo utilizando el botón "-" como delimitador.
que tienen un nombre de archivo en un formato como:¿Cómo se analiza un nombre de archivo en bash?
system-source-yyyymmdd.dat
me gustaría ser capaz de analizar los diferentes bits del nombre de archivo utilizando el botón "-" como delimitador.
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
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.
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 ;-)
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"
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. ..
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 $. –
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. –
¿cómo puedo asignar el resultado a una variable? si lo hago 'var =" system-source-yyyymmdd.dat "| cut -d'- '-f2' no funciona. – EsseTi