Antworten:
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'').
Ich denke du kannst es mit awk versuchen
awk -v OFS="\t" '$1=$1' file1
oder SED, wenn Sie bevorzugen
sed 's/[:blank:]+/,/g' thefile.txt > the_modified_copy.txt
oder sogar tr
tr -s '\t' < thefile.txt | tr '\t' ' ' > the_modified_copy.txt
oder eine vereinfachte Version der von Sam Bisbee vorgeschlagenen tr-Lösung
tr ' ' \\t < someFile > someFile
tr ' ' \\t < someFile > someFile
ls -l | sed "s/ \+/ /g"
awk -v OFS="\t" '$1=$1' file1
bemerkte ich , dass , wenn Sie eine Zeile , die mit der Nummer 0 (zB haben 0 1 2
), dann wird die Zeile aus dem Ergebnis weggelassen werden.
Verwenden von Perl :
perl -p -i -e 's/ /\t/g' file.txt
perl -p -i -e 's/\t/ /g' *.java
besser tr Befehl ein :
tr [:blank:] \\t
Dadurch wird die Ausgabe von beispielsweise entpacken -l für die weitere Verarbeitung mit grep, cut usw. bereinigt .
z.B,
unzip -l some-jars-and-textfiles.zip | tr [:blank:] \\t | cut -f 5 | grep jar
tr [:blank:] \\t
Laden Sie das folgende Skript herunter und führen Sie es aus, um Soft-Tabs in Nur-Text-Dateien rekursiv in Hard-Tabs zu konvertieren.
Platzieren Sie das Skript in dem Ordner, der die Nur-Text-Dateien enthält, und führen Sie es aus.
#!/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;
Beispielbefehl zum Konvertieren jeder .js-Datei unter dem aktuellen Verzeichnis in Tabulatoren (nur führende Leerzeichen werden konvertiert):
find . -name "*.js" -exec bash -c 'unexpand -t 4 --first-only "$0" > /tmp/totabbuff && mv /tmp/totabbuff "$0"' {} \;
Sie können auch verwenden astyle
. Ich fand es sehr nützlich und es hat auch mehrere Möglichkeiten:
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.`
Wenn Sie alle aufeinander folgenden Leerzeichen in einer Zeile durch eine Registerkarte ersetzen möchten 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
Wenn Sie über das Ersetzen aller Leerzeichen (z. B. Leerzeichen, Tabulatoren, Zeilenumbrüche usw.) sprechen, dann 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
Wenn Sie über das Reparieren einer durch Tabulatoren beschädigten Datei sprechen, verwenden Sie expand
und unexpand
wie in anderen Antworten erwähnt.
Dadurch werden aufeinanderfolgende Leerzeichen durch ein Leerzeichen (jedoch keine Registerkarte) ersetzt.
tr -s '[:blank:]'
Dadurch werden aufeinanderfolgende Leerzeichen durch eine Registerkarte ersetzt.
tr -s '[:blank:]' '\t'
-c
ersetzt es durch das fortlaufende Zeichen, die keine Leerzeichen sind.
tr
oder herumspielen zu müssensed
.