Entrada:
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
Saída desejada:
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
Como posso adicionar um 0
se houver apenas um dígito, por exemplo, 1
na parte "dia"? Preciso deste formato de data: AAAAMM DD.
\<[0-9]\>
construto, que acho que é o responsável por corresponder os dígitos únicos, mas não tenho certeza do que esse construto é chamado. Obrigado.&
na string de substituição usará os LHS combinados -sed 's/\<[0-9]\>/0&/'
<>
um limite de palavras na sintaxe do shell regex. Venha para pensar sobre isso, mesmo `sed 's / \ b [0-9] \ b / 0 & /' também funciona. Obrigado a ambos. :)<>
é um recurso do regex estendido (não do shell, como tal) ... dependendo de qual versão e quais opções você usa,sed
e osshell
dois podem usar o regex estendido ou padrão ... o regex padrão usa\<\>
Outra solução:
awk '{$2 = sprintf("%02d", $2); print}'
fonte
Aqui está uma maneira (não-sed) de usar o bash com regex estendido .
Esse método permite que o escopo faça um processamento mais complexo de linhas individuais. (ou seja, mais do que apenas substituições regex)
saída:
fonte
Eu faria algo assim:
Isso pega números solitários, retira-os do espaço em branco com um grupo
' ([0-9]) '
e os coloca novamente com 0 e preenchimento de espaço em branco' 0\1 '
.A
-E
opção permite expressões modernas de RegEx no OSX (para que você não precise usá-"\"
lo com tanta frequência),-r
faz o mesmo nos sistemas Linux que testei.fonte
fonte