2008-09-08 7 views

Répondre

29

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

+0

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 $. –

+0

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é. –

+0

comment puis-je affecter la sortie à une variable? si je fais 'var =" system-source-yyyymmdd.dat "| couper -d'- '-f2' ne fonctionne pas. – EsseTi

7

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.

8

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 ;-)

1

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" 
8

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. ..

Questions connexes