Câu trả lời:
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'').
Tôi nghĩ bạn có thể thử với awk
awk -v OFS="\t" '$1=$1' file1
hoặc SED nếu bạn mua trước
sed 's/[:blank:]+/,/g' thefile.txt > the_modified_copy.txt
hoặc thậm chí tr
tr -s '\t' < thefile.txt | tr '\t' ' ' > the_modified_copy.txt
hoặc một phiên bản đơn giản của giải pháp tr do Sam Bisbee đưa ra
tr ' ' \\t < someFile > someFile
tr ' ' \\t < someFile > someFile
ls -l | sed "s/ \+/ /g"
awk -v OFS="\t" '$1=$1' file1
tôi nhận thấy rằng nếu bạn có một dòng bắt đầu bằng số 0 (ví dụ 0 1 2
), thì dòng đó sẽ bị bỏ qua khỏi kết quả.
Sử dụng Perl :
perl -p -i -e 's/ /\t/g' file.txt
perl -p -i -e 's/\t/ /g' *.java
lệnh tr tốt hơn :
tr [:blank:] \\t
Điều này sẽ làm sạch đầu ra của say, giải nén -l , để xử lý thêm với grep, cut, v.v.
ví dụ,
unzip -l some-jars-and-textfiles.zip | tr [:blank:] \\t | cut -f 5 | grep jar
tr [:blank:] \\t
Tải xuống và chạy tập lệnh sau để chuyển đổi đệ quy tab mềm thành tab cứng trong tệp văn bản thuần túy.
Đặt và thực thi tập lệnh từ bên trong thư mục chứa các tệp văn bản thuần túy.
#!/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;
Bạn cũng có thể sử dụng astyle
. Tôi thấy nó khá hữu ích và nó cũng có một số tùy chọn:
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.`
Nếu bạn đang nói về việc thay thế tất cả các khoảng trắng liên tiếp trên một dòng bằng một tab thì 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
Nếu bạn đang nói về việc thay thế tất cả khoảng trắng (ví dụ: khoảng trắng, tab, dòng mới, v.v.) thì 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
Nếu bạn đang nói về việc sửa một tệp bị hỏng tab thì hãy sử dụng expand
vàunexpand
như đã đề cập trong các câu trả lời khác.
Điều này sẽ thay thế các khoảng trắng liên tiếp bằng một khoảng trắng (nhưng không phải tab).
tr -s '[:blank:]'
Điều này sẽ thay thế các khoảng trắng liên tiếp bằng một tab.
tr -s '[:blank:]' '\t'
-c
nó thay thế các ký tự liên tiếp không phải là dấu cách.
tr
hoặcsed
.