Tôi muốn xóa tất cả các dòng trống từ một tập tin. Ngay cả khi dòng chứa khoảng trắng hoặc tab, nó cũng nên được loại bỏ.
Tôi muốn xóa tất cả các dòng trống từ một tập tin. Ngay cả khi dòng chứa khoảng trắng hoặc tab, nó cũng nên được loại bỏ.
Câu trả lời:
Chỉ grep
dành cho những khoảng trống:
grep '[^[:blank:]]' < file.in > file.out
[:blank:]
, bên trong phạm vi ký tự ( [...]
), được gọi là lớp ký tự POSIX. Có một vài lượt thích [:alpha:]
, [:digit:]
... [:blank:]
khớp với không gian trắng ngang (trong ngôn ngữ POSIX, đó là không gian và tab, nhưng ở các địa phương khác có thể có nhiều hơn, giống như tất cả các ký tự khoảng cách ngang Unicode trong các địa điểm UTF8) trong khi [[:space:]]
khớp với trắng ngang và dọc ký tự khoảng trắng (giống như các [:blank:]
thứ cộng như tab dọc, nguồn cấp dữ liệu biểu mẫu ...).
grep '[:blank:]'
Sẽ trở lại các dòng có chứa bất kỳ ký tự, :
, b
, l
, a
, n
hoặc k
. Các lớp nhân vật chỉ được nhận ra bên trong [...]
và ^
bên trong [...]
phủ định tập hợp. Vì vậy, [^[:blank:]]
có nghĩa là bất kỳ nhân vật nhưng những người trống.
[^[:blank:]]$
sẽ chỉ khớp với các dòng kết thúc ở dạng không trống. Chúng tôi muốn các dòng chứa không trống ở bất cứ đâu
grep -E '\S'
sẽ không làm việc?
Làm thế nào về:
sed -e 's/^[[:blank:]]*$//' source_file > newfile
hoặc là
sed -e '/^[[:blank:]]*$/d' source_file > newfile
I E
Đối với mỗi dòng, thay thế:
^
")[[:blank:]]
") bằng 0 hoặc nhiều lần (" *
")$
")Thông tin thêm về :: blank :: và các ký tự đặc biệt khác tại http://www.zytrax.com/tech/web/regex.htm#special
[[:space:]]
bao gồm các tab. Nếu nó không regex của bạn sẽ thất bại nếu một khoảng trắng theo một tab.
wctype(3)
và isalpha(3)
trang mô tả những gì các lớp nhân vật sẽ phù hợp.
Bạn có thể sử dụng sed
lệnh để xóa các dòng trống:
sed '/^$/d' in > out
Lệnh này xóa tất cả các dòng trống từ tệp "trong"
Có vẻ như tôi đã tìm thấy một thứ không nhanh như vậy, nhưng cuối cùng cũng buồn cười:
| xargs -L1
Hãy thử ex -way:
ex -s +'v/\S/d' -cwq test.txt
Đối với nhiều tệp (chỉnh sửa tại chỗ):
ex -s +'bufdo!v/\S/d' -cxa *.txt
Lưu ý: :bufdo
Lệnh không phải là POSIX .
Không sửa đổi tệp (chỉ in trên đầu ra tiêu chuẩn):
cat test.txt | ex -s +'v/\S/d' +%p +q! /dev/stdin
Sử dụng lệnh sau:
grep '\S' FILE
trong đó loại bỏ tất cả các dòng bao gồm cả không gian hoặc các tab.
Mặt khác, loại bỏ không bao gồm các dòng có dấu cách / tab, sử dụng:
grep . FILE
Ví dụ:
$ printf "line1\n\nline2\n \nline3\n" > FILE
$ cat -v FILE
line1
line2
line3
$ grep '\S' FILE
line1
line2
line3
$ grep . FILE
line1
line2
line3
Xem thêm:
sed
: Xóa các dòng trống bằng sedawk
: Xóa các dòng trống bằng awk
$
kết thúc cho dòng?