J'ai un nom de fichier dans un format comme:Comment analyser un nom de fichier dans bash?
system-source-yyyymmdd.dat
Je voudrais être en mesure d'analyser les différents bits du nom de fichier en utilisant le « - » comme séparateur.
J'ai un nom de fichier dans un format comme:Comment analyser un nom de fichier dans bash?
system-source-yyyymmdd.dat
Je voudrais être en mesure d'analyser les différents bits du nom de fichier en utilisant le « - » comme séparateur.
Vous pouvez utiliser le cut command pour obtenir à chacun des 3 champs « », par exemple:
$ echo "system-source-yyyymmdd.dat" | cut -d'-' -f2
source
« -d » spécifie le délimiteur, « -f » indique le numéro du champ dont vous avez besoin
Utilisez la commande cut
.
par exemple.
echo "system-source-yyyymmdd.dat" | cut -f1 -d'-'
va extraire le premier bit.
Modifiez la valeur du paramètre -f
pour obtenir les pièces appropriées. Voici un guide sur la commande Cut.
Selon vos besoins, awk est plus flexible que coupé. Un premier 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
Le problème est que décrivant awk comme « plus flexible » est certainement comme appeler l'iPhone un téléphone cellulaire avec ;-)
Une autre méthode consiste à utiliser des outils d'analyse internes de la coque, qui évite le coût de la création de processus enfants:
oIFS=$IFS IFS=- file="system-source-yyyymmdd.dat" set $file IFS=$oIFS echo "Source is $2"
une belle et élégante (dans mon esprit :-) en utilisant seulement built-ins est de le mettre dans un tableau
var='system-source-yyyymmdd.dat'
parts=(${var//-/ })
Ensuite, vous pouvez trouver les pièces dans le tableau ...
echo ${parts[0]} ==> system
echo ${parts[1]} ==> source
echo ${parts[2]} ==> yyyymmdd.dat
caveat: cela ne fonctionnera pas si le nom contient des caractères « étranges » tels que l'espace, ou, le ciel interdit, citations, backquotes. ..
Je suis curieux de savoir pourquoi vous avez ajouté l'invite #. Normalement, cette invite indique la racine ou le superutilisateur. En général, je pense que des trucs comme essayer la commande ** cut ** serait mieux fait en tant qu'utilisateur régulier. J'aurais utilisé le prompt $. –
Oh, ouais - bon point. Je dois admettre que j'étais connecté en tant que root à ce moment-là et que j'y suis allé tout simplement - une mauvaise habitude, je sais. Cela dit, je pense que echo et cut sont deux des commandes les moins dangereuses :) Mais, pour être complet, je vais certainement mettre à jour l'exemple tout de suite. À votre santé. –
comment puis-je affecter la sortie à une variable? si je fais 'var =" system-source-yyyymmdd.dat "| couper -d'- '-f2' ne fonctionne pas. – EsseTi