¿Cómo se puede borrar el primer carácter de toda la cadena del archivo si es cero?
p.ej
tengo archivo
$ cat file
01111111 01222222 6666066
09999011 02222044 0743333
01000000 30000000 2222220
Pruebe con la salida del comando sed:
$ sed 's/^0*\(.*\)/\1/' file
1111111 01222222 6666066
9999011 02222044 0743333
1000000 30000000 2222220
pero esto sólo borra el cero en la primera columna.
Cómo borrar todos los ceros en el primer carácter de un archivo, por ejemplo, salida:
1111111 1222222 6666066
9999011 2222044 743333
1000000 30000000 2222220
Respuesta1
Probablemente sea justo suponer que una cadena en su texto está delimitada por espacios en blanco. Si es así, deberá eliminar un cero siempre que esté precedido por un espacio en blanco:
sed 's/\([[:space:]]\)0/\1/g'
La \(...\)
construcción guarda el espacio en blanco que precede a un cero y, \1
en el reemplazo, recupera el texto guardado.
Luego ocúpate también de los ceros a la izquierda:
sed -e 's/\([[:space:]]\)0/\1/g' -e 's/^0//'
Por cierto, tu ejemplo noborrarlos ceros no iniciales, peroreemplazaellos con un espacio en blanco. Mi solución supone el borrado.
Además, su solución para reemplazar el cero inicial en realidad reemplaza una secuencia completa de ceros iniciales. Sin embargo, su pregunta pide laprimerocero para borrar. Eso es lo que hace mi solución.
Respuesta2
Perl es útil para esto:
perl -lape 's/\b(0+)/" " x length($1)/ge' file
1111111 1222222 6666066
9999011 2222044 743333
1000000 30000000 2222220
O el equivalente en awk
awk '{while (1) if (gsub(/\<0/, " ", $0) == 0) break; print}' file
Ambos convertirán "0" o "00" (como palabras independientes) en solo espacios.
Si usted tiene
$ cat file
01111111 01222222 6666066
09999011 02222044 0743333
01000000 30000000 2222220
00000007 00000009 0000000
Luego, para conservar los valores cero en la última línea, puedes:
$ perl -lape 's/\b(0+)(\d)/" " x length($1) . $2/ge' file
1111111 1222222 6666066
9999011 2222044 743333
1000000 30000000 2222220
7 9 0