Réponses:
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'').
Je pense que tu peux essayer avec awk
awk -v OFS="\t" '$1=$1' file1
ou SED si vous préférez
sed 's/[:blank:]+/,/g' thefile.txt > the_modified_copy.txt
ou même tr
tr -s '\t' < thefile.txt | tr '\t' ' ' > the_modified_copy.txt
ou une version simplifiée de la solution tr proposée par Sam Bisbee
tr ' ' \\t < someFile > someFile
tr ' ' \\t < someFile > someFile
ls -l | sed "s/ \+/ /g"
awk -v OFS="\t" '$1=$1' file1
j'ai remarqué que si vous avez une ligne commençant par le numéro 0 (par exemple 0 1 2
), la ligne sera supprimée du résultat.
Utilisation de Perl :
perl -p -i -e 's/ /\t/g' file.txt
perl -p -i -e 's/\t/ /g' *.java
meilleure commande tr :
tr [:blank:] \\t
Cela nettoiera la sortie de disons, unzip -l , pour un traitement ultérieur avec grep, cut, etc.
par exemple,
unzip -l some-jars-and-textfiles.zip | tr [:blank:] \\t | cut -f 5 | grep jar
tr [:blank:] \\t
Téléchargez et exécutez le script suivant pour convertir de manière récursive les onglets logiciels en onglets fixes dans des fichiers de texte brut.
Placez et exécutez le script à partir du dossier contenant les fichiers de texte brut.
#!/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;
Exemple de commande pour convertir chaque fichier .js sous le répertoire courant en tabulations (seuls les espaces de début sont convertis):
find . -name "*.js" -exec bash -c 'unexpand -t 4 --first-only "$0" > /tmp/totabbuff && mv /tmp/totabbuff "$0"' {} \;
Vous pouvez également utiliser astyle
. Je l'ai trouvé assez utile et il a aussi plusieurs options:
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 vous parlez de remplacer tous les espaces consécutifs sur une ligne par une tabulation, alors 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 vous parlez de remplacer tous les espaces (par exemple, espace, tabulation, nouvelle ligne, etc.), alors 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 vous parlez de réparer un fichier endommagé par des onglets, utilisez expand
et unexpand
comme mentionné dans d'autres réponses.
Cela remplacera les espaces consécutifs par un espace (mais pas une tabulation).
tr -s '[:blank:]'
Cela remplacera les espaces consécutifs par une tabulation.
tr -s '[:blank:]' '\t'
-c
il remplace les caractères consécutifs qui ne sont pas des espaces.
tr
oused
.