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 0si solo hay un dígito, por ejemplo, 1en 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,sedyshellambas 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
-Eopción permite expresiones RegEx modernas en OSX (para que no tenga que usarlas con"\"tanta frecuencia),-rhace lo mismo en los sistemas Linux que he probado.fuente
fuente