¿Cómo se puede borrar el primer carácter de todas las cadenas del archivo?

¿Cómo se puede borrar el primer carácter de todas las cadenas del archivo?

¿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, \1en 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

información relacionada