¿Cómo reemplazo los espacios en blanco con pestañas en Linux en un archivo de texto determinado?
fuente
¿Cómo reemplazo los espacios en blanco con pestañas en Linux en un archivo de texto determinado?
UNEXPAND(1) User Commands UNEXPAND(1)
NAME
unexpand - convert spaces to tabs
SYNOPSIS
unexpand [OPTION]... [FILE]...
DESCRIPTION
Convert blanks in each FILE to tabs, writing to standard output. With
no FILE, or when FILE is -, read standard input.
Mandatory arguments to long options are mandatory for short options
too.
-a, --all
convert all blanks, instead of just initial blanks
--first-only
convert only leading sequences of blanks (overrides -a)
-t, --tabs=N
have tabs N characters apart instead of 8 (enables -a)
-t, --tabs=LIST
use comma separated LIST of tab positions (enables -a)
--help display this help and exit
--version
output version information and exit
. . .
STANDARDS
The expand and unexpand utilities conform to IEEE Std 1003.1-2001
(``POSIX.1'').
Creo que puedes intentarlo con awk
awk -v OFS="\t" '$1=$1' file1
o SED si lo prefiere
sed 's/[:blank:]+/,/g' thefile.txt > the_modified_copy.txt
o incluso tr
tr -s '\t' < thefile.txt | tr '\t' ' ' > the_modified_copy.txt
o una versión simplificada de la solución tr sugerida por Sam Bisbee
tr ' ' \\t < someFile > someFile
tr ' ' \\t < someFile > someFile
ls -l | sed "s/ \+/ /g"
awk -v OFS="\t" '$1=$1' file1
Noté que si tiene una línea que comienza con el número 0 (por ejemplo 0 1 2
), la línea se omitirá del resultado.
Usando Perl :
perl -p -i -e 's/ /\t/g' file.txt
perl -p -i -e 's/\t/ /g' *.java
mejor comando tr :
tr [:blank:] \\t
Esto limpiará la salida de, digamos, unzip -l , para su posterior procesamiento con grep, cut, etc.
p.ej,
unzip -l some-jars-and-textfiles.zip | tr [:blank:] \\t | cut -f 5 | grep jar
tr [:blank:] \\t
Descargue y ejecute el siguiente script para convertir de forma recursiva pestañas blandas en pestañas duras en archivos de texto sin formato.
Coloque y ejecute el script desde dentro de la carpeta que contiene los archivos de texto sin formato.
#!/bin/bash
find . -type f -and -not -path './.git/*' -exec grep -Iq . {} \; -and -print | while read -r file; do {
echo "Converting... "$file"";
data=$(unexpand --first-only -t 4 "$file");
rm "$file";
echo "$data" > "$file";
}; done;
Comando de ejemplo para convertir cada archivo .js en el directorio actual a pestañas (solo se convierten los espacios iniciales):
find . -name "*.js" -exec bash -c 'unexpand -t 4 --first-only "$0" > /tmp/totabbuff && mv /tmp/totabbuff "$0"' {} \;
También puede utilizar astyle
. Lo encontré bastante útil y también tiene varias opciones:
Tab and Bracket Options:
If no indentation option is set, the default option of 4 spaces will be used. Equivalent to -s4 --indent=spaces=4. If no brackets option is set, the
brackets will not be changed.
--indent=spaces, --indent=spaces=#, -s, -s#
Indent using # spaces per indent. Between 1 to 20. Not specifying # will result in a default of 4 spaces per indent.
--indent=tab, --indent=tab=#, -t, -t#
Indent using tab characters, assuming that each tab is # spaces long. Between 1 and 20. Not specifying # will result in a default assumption of
4 spaces per tab.`
Si está hablando de reemplazar todos los espacios consecutivos en una línea con una tabulación, entonces tr -s '[:blank:]' '\t'
.
[root@sysresccd /run/archiso/img_dev]# sfdisk -l -q -o Device,Start /dev/sda
Device Start
/dev/sda1 2048
/dev/sda2 411648
/dev/sda3 2508800
/dev/sda4 10639360
/dev/sda5 75307008
/dev/sda6 96278528
/dev/sda7 115809778
[root@sysresccd /run/archiso/img_dev]# sfdisk -l -q -o Device,Start /dev/sda | tr -s '[:blank:]' '\t'
Device Start
/dev/sda1 2048
/dev/sda2 411648
/dev/sda3 2508800
/dev/sda4 10639360
/dev/sda5 75307008
/dev/sda6 96278528
/dev/sda7 115809778
Si está hablando de reemplazar todos los espacios en blanco (por ejemplo, espacio, tabulación, nueva línea, etc.), entonces tr -s '[:space:]'
.
[root@sysresccd /run/archiso/img_dev]# sfdisk -l -q -o Device,Start /dev/sda | tr -s '[:space:]' '\t'
Device Start /dev/sda1 2048 /dev/sda2 411648 /dev/sda3 2508800 /dev/sda4 10639360 /dev/sda5 75307008 /dev/sda6 96278528 /dev/sda7 115809778
Si está hablando de reparar un archivo con pestañas dañadas, use expand
y unexpand
como se menciona en otras respuestas.
Usando sed :
T=$(printf "\t")
sed "s/[[:blank:]]\+/$T/g"
o
sed "s/[[:space:]]\+/$T/g"
Esto reemplazará los espacios consecutivos con un espacio (pero no tabulación).
tr -s '[:blank:]'
Esto reemplazará los espacios consecutivos con una pestaña.
tr -s '[:blank:]' '\t'
-c
reemplaza los caracteres consecutivos que no son espacios.
tr
osed
.