Script shell Bourne pour convertir un numéro au format téléphonique

Je veux changer un numéro tel que 1234567890 à 456-7890; y a-t-il un moyen de faire cela dans la programmation Unix Shell?

C’est ce que DigitalRoss et Jonathan Leffler essayaient de dire:

echo "1234567890"|sed 's/[0-9][0-9][0-9]\([0-9][0-9][0-9]\)\([0-9][0-9][0-9][0-9]\)/\1-\2/' 

Cela devrait fonctionner sur toutes les versions de sed , à l’ sed des versions les plus mortelles, mais il ne fait pas attention aux limites de mots, etc., ni à la présence de chiffres ou de groupes de chiffres supplémentaires sur la même ligne. Il reformate simplement la première séquence de dix chiffres trouvée. Si vous avez des espaces, des tabulations, des virgules ou d’autres délimiteurs, ils peuvent être utilisés pour restreindre davantage la correspondance.

@OP, vous avez donné des détails sur les conditions de modification des numéros. vous pouvez simplement utiliser bash sur votre solaris 10 pour faire cela, pas besoin d’expression régulière de fantaisie dans votre cas.

  $ n=1234567890 $ echo "${n:3:3}-${n:6}" 456-7890 
 $ sed -e 's/...\(...\)\(....\)/\1-\2/' 1234567890 456-7890 

Vous pouvez sélectionner des mots de chaîne de chiffres plus soigneusement, mais pas parfaitement, avec:

 sed -e 's/\b[0-9]..\([0-9]..\)\([0-9]...\)\b/\1-\2/' 

G’day,

N’oubliez pas les ancres pour obtenir les sept derniers chiffres de la chaîne. Quelque chose comme:

 echo "1234567890" | sed -e 's/\([0-9]{3}\)\([0-9]{4}\)$/\1-\2/' 

HTH

à votre santé,

Les scripts shell sont simplement un tas de commandes, regroupées, vous pouvez simplement appeler n’importe quel langage de script (tel que Python / Ruby / Perl) comme vous le feriez sed / awk / grep.

Par exemple, en utilisant Ruby:

 $ echo "Change 1234567890 to 456-7890" | ruby -e 'puts $stdin.read.gsub(/\d{3}(\d{3})(\d{3})/){|x| "#{$1}-#{$2}"}' 

..qui sorties:

  Changer le 456-7890 au 456-7890 

Il y a quelques avantages à utiliser (par exemple) Ruby over sed:

  • Ruby / etc sera plus cohérent sur plusieurs plates-formes que sed / awk / grep, qui ont tendance à prendre des arguments différents et à fonctionner légèrement différemment, en fonction du système d’exploitation / de la dissortingbution utilisé (e).
  • Si la commande devient plus compliquée, il est sortingvial de la transformer en un script “approprié”