Ho problemi a ridurre la sintassi sed per aggiungere un numero variabile di zeri iniziali a uno schema organizzativo numerico. Le stringhe su cui sto operando appaiono come
1.1.1.1,Some Text Here
sfruttando la sintassi sed
sed -r ":r;s/\b[0-9]{1,$((1))}\b/0&/g;tr"
Sono in grado di suscitare la risposta
01.01.01.01,Some Text Here
Tuttavia, quello che sto cercando è qualcosa da riempire con zero fino a 2 cifre nei campi 2 e 3 e 3 cifre nel campo 4 in modo che tutti gli articoli abbiano una lunghezza standard a [0-9]. [0-9] { 2}. [0-9] {2}. [0-9] {3}
1.01.01.001,Some Text Here
Per la mia vita non riesco nemmeno a capire come modificare il limite per includere i parametri necessari per agganciare solo i numeri dopo un punto. Penso che abbia qualcosa a che fare con l'uso del \ b che capisco corrisponda a zero caratteri al limite di una parola, ma non capisco perché i miei tentativi di aggiungere un punto alla corrispondenza falliscano come segue:
sed -r ":r;s/\.\b[0-9]{1,$((1))}\b/0&/g;tr"
sed -r ":r;s/\b\.[0-9]{1,$((1))}\b/0&/g;tr"
Both cause the statement to hang
sed -r ":r;s/\b[0-9]\.{1,$((1))}\b/0&/g;tr"
sed -r ":r;s/\b[0-9]{1,$((1))}\.\b/0&/g;tr"
sed -r ":r;s/\b[0-9]{1,$((1))}\b\./0&/g;tr"
cause the statement to output:
1.01.01.1,Some Text Here
Inoltre, mi aspetto di avere ulteriori problemi se la dichiarazione contiene testo come:
1.1.1.1,Some Number 1 Here
È una conclusione scontata che ho bisogno di imparare davvero sed e tutte le sue complessità. Ci sto lavorando, ma mi aspetto che questa particolare affermazione continui a causarmi problemi per un po '. Qualsiasi aiuto sarebbe molto apprezzato.
EDIT: ho trovato un modo ... Questa affermazione sembra fare quello che sto cercando, ma deve esserci un modo più elegante per farlo.
sed -r ':r;s/\b[0-9]{1,1}\.\b/0&/;tr;:i;s/\b[0-9]{1,2},\b/0&/;ti;s/.//'
Inoltre, sintatticamente ciò causerà problemi se un formato numerico simile appare nel testo ... simile a:
1.1.1.1,Some Text Referring to Document XXX Heading 1.2.3
In tal caso si tradurrà in:
1.01.01.001,Some Text Referring to Document XXX Heading 01.02.03
Risolto Grazie a tutti per il vostro aiuto qui. Inizialmente ho risolto il problema con la risposta che ho accettato di seguito. Ho sentito spostare la soluzione in Python come parte di una soluzione più ampia sfruttando il tipo di seguito:
def getPaddedKey(line):
keyparts = line[0].split(".")
keyparts = map(lambda x: x.rjust(5, '0'), keyparts)
return '.'.join(keyparts)
s=sorted(reader, key=getPaddedKey)
printf
(o una printf
chiamata in Awk) potrebbe essere più semplice.
sed -r ':r;s/\b[0-9]{1,1}\.\b/0&/;tr;:i;s/\b[0-9]{1,2},\b/0&/;ti;s/.//'
tuttavia, mi piacerebbe sapere se esiste un approccio più elegante.