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
Salida deseada:
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
¿Cómo puedo agregar un 0
si solo hay un dígito, por ejemplo, 1
en la parte "día"? Necesito este formato de fecha: AAAAMM DD.
\<[0-9]\>
constructo, que creo que es el responsable de hacer coincidir los dígitos individuales, pero no estoy seguro de cómo se llama este constructo. Gracias.&
en la cadena de reemplazo usará el LHS coincidente -sed 's/\<[0-9]\>/0&/'
<>
es un límite de palabras en la sintaxis de expresiones regulares de shell. Ahora que lo pienso, incluso 'sed' s / \ b [0-9] \ b / 0 & / 'también funciona. Gracias a los dos. :)<>
es una característica de la expresión regular extendida (no del shell, como tal) ... dependiendo de la versión y las opciones que use,sed
yshell
ambas pueden usar la expresión regular extendida o estándar ... usa la expresión regular estándar\<\>
Otra solución:
awk '{$2 = sprintf("%02d", $2); print}'
fuente
Aquí hay una forma (no sed) de usar bash con expresiones regulares extendidas .
Este método permite que el alcance realice un procesamiento más complejo de líneas individuales. (es decir, más que simples sustituciones de expresiones regulares)
salida:
fuente
Haría algo como esto:
Esto toma números solitarios, los despoja de espacios en blanco con un grupo
' ([0-9]) '
, luego los vuelve a colocar con 0 y relleno de espacios en blanco' 0\1 '
.La
-E
opción permite expresiones RegEx modernas en OSX (para que no tenga que usarlas con"\"
tanta frecuencia),-r
hace lo mismo en los sistemas Linux que he probado.fuente
fuente