unix - saltos - cómo eliminar los espacios en blanco iniciales de cada línea en un archivo?
eliminar saltos de linea (7)
Tengo un archivo que se ve así:
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
Quiero que se vea así (eliminar indentaciones):
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
¿Cómo puede hacerse esto (usando sed
quizás?)
Aqui tienes:
user@host:~$ sed ''s/^[/t ]*//g'' < file-in.txt
O:
user@host:~$ sed ''s/^[/t ]*//g'' < file-in.txt > file-out.txt
Este código de Perl edita su archivo original:
perl -i -ne ''s/^/s+//;print'' file
El siguiente hace una copia de seguridad antes de editar el archivo original:
perl -i.bak -ne ''s/^/s+//;print'' file
Tenga en cuenta que Perl toma mucho de sed (y awk)
FWIW, si está editando este archivo, probablemente pueda resaltar todas las líneas y usar su botón de deshacer pestaña.
- En vim, use shift-v para resaltar las líneas, luego presione <<
- Si está en un Mac, puede usar Atom, Sublime, etc., luego resalte con su mouse y luego presione shift-tab
No estoy seguro de si hay algún requisito de que esto deba hacerse desde la línea de comando. Si es así, entonces: pulgares arriba: ¡a la respuesta aceptada! =)
Para este problema específico, algo como esto funcionaría:
$ sed ''s/^ *//g'' < input.txt > output.txt
Dice que se reemplacen todos los espacios al comienzo de una línea sin nada. Si también quieres eliminar pestañas, cámbialo a esto:
$ sed ''s/^[ /t]+//g'' < input.txt > output.txt
La "s" inicial antes de / significa "sustituto". Los / ''s son los delimitadores de los patrones. Los datos entre los primeros dos son el patrón para hacer coincidir, y los datos entre el segundo y el tercero / son los datos para reemplazarlo. En este caso, lo estás reemplazando por nada. La "g" después de la barra final significa hacerlo "globalmente", es decir, sobre todo el archivo en lugar de solo en la primera coincidencia que encuentre.
Finalmente, en lugar de < input.txt > output.txt
puede usar la opción -i
que significa editar el archivo "en su lugar". Es decir, no necesita crear un segundo archivo para contener su resultado. Si usa esta opción, perderá su archivo original.
puedes usar awk
$ awk ''{$1=$1}1'' file
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
sed
$ sed ''s|^[[:blank:]]*||g'' file
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
ciclo while / read de shell
while read -r line
do
echo $line
done <"file"
sed -e ''s / ^ [/ t] * //'' name_of_file_from_which_you_want_to_remove_space> ''name _file_where_you_want_to_store_output''
por ejemplo: - sed -e ''s / ^ [/ t] * //'' archivo1.txt> salida.txt
Nota:
s /: Sustituir comando ~ reemplazo por patrón (^ [/ t] *) en cada línea direccionada
^ [/ t] *: patrón de búsqueda (^ - inicio de la línea; [/ t] * coincide con uno o más espacios en blanco, incluida la pestaña)
//: Reemplaza (elimina) todos los patrones combinados
sed "s/^[ /t]*//" -i youfile
Advertencia: esto sobrescribirá el archivo original.