Contribution:
201103 1 /mnt/hdd/PUB/SOMETHING
201102 7 /mnt/hdd/PUB/SOMETH ING
201103 11 /mnt/hdd/PUB/SO METHING
201104 3 /mnt/hdd/PUB/SOMET HING
201106 1 /mnt/hdd/PUB/SOMETHI NG
Sortie désirée:
201103 01 /mnt/hdd/PUB/SOMETHING
201102 07 /mnt/hdd/PUB/SOMETH ING
201103 11 /mnt/hdd/PUB/SO METHING
201104 03 /mnt/hdd/PUB/SOMET HING
201106 01 /mnt/hdd/PUB/SOMETHI NG
Comment puis-je ajouter un 0
s'il n'y a qu'un seul chiffre, par exemple 1
dans la partie "jour"? J'ai besoin de ce format de date: YYYYMM DD.
\<[0-9]\>
construction qui, je pense, est celle responsable de la correspondance des chiffres, mais je ne sais pas comment cette construction est appelée. Merci.&
dans la chaîne de remplacement, utilisez le LHS correspondant -sed 's/\<[0-9]\>/0&/'
<>
une limite de mot dans la syntaxe des expressions rationnelles du shell. À bien y penser, même `sed 's / \ b [0-9] \ b / 0 & /' fonctionne également. Merci à vous deux. :)<>
est une caractéristique de regex étendu (non de la coquille, en tant que telle) ... selon la version et les options que vous utilisez,sed
etshell
peuvent aussi bien utiliser soit prolongée ou standards regex ... utilisations standard regex\<\>
Une autre solution:
awk '{$2 = sprintf("%02d", $2); print}'
la source
Voici une façon (non sed) d'utiliser bash avec regex étendu .
Cette méthode permet à scope de faire un traitement plus complexe de lignes individuelles. (c.-à-d. plus que de simples substitutions d'expression régulière)
production:
la source
Je ferais quelque chose comme ça:
Cela saisit les nombres solitaires, les supprime des espaces blancs avec un groupe
' ([0-9]) '
, puis les remet en place avec 0 et un espace blanc' 0\1 '
.L'
-E
option permet des expressions RegEx modernes sur OSX (vous n'avez donc pas à utiliser"\"
si souvent),-r
fait la même chose sur les systèmes Linux que j'ai testés.la source
la source