FILE
:
hello
world
foo
bar
Làm thế nào tôi có thể xóa tất cả các dòng mới trống trong này FILE
?
Đầu ra của lệnh:
FILE
:
hello
world
foo
bar
FILE
:
hello
world
foo
bar
Làm thế nào tôi có thể xóa tất cả các dòng mới trống trong này FILE
?
Đầu ra của lệnh:
FILE
:
hello
world
foo
bar
Câu trả lời:
grep . FILE
(Và nếu bạn thực sự muốn làm điều đó trong sed, thì sed -e /^$/d FILE
:)
(Và nếu bạn thực sự muốn làm điều đó trong awk, thì awk /./ FILE
:)
sed -ne/./p
cũng hoạt động và awk /./
ngắn hơn (hành động là {print}
nếu không xác định). @ ghostdog74: vậy grep '[^[:space:]]'
.
.
biểu thức chính quy khớp với bất kỳ ký tự nào ngoại trừ dòng mới.
grep . FILE
hoạt động với ví dụ đã cho, nhưng không nhất thiết khi tệp có thể có byte không phải là một phần của bộ ký tự. Ví dụ, với GNU grep 2.20, printf "\x80\n" | grep .
không có kết quả nào.
Hãy thử những cách sau:
grep -v -e '^$'
grep -v -e '^$'
luôn hoạt động, đó không phải là trường hợp của grep .
. Ví dụ, với GNU grep 2.20, printf "\x80\n" | grep .
không xuất ra dòng nào, trong khi printf "\x80\n" | grep -v '^$'
xuất ra dòng không trống.
with awk, just check for number of fields. no need regex
$ more file
hello
world
foo
bar
$ awk 'NF' file
hello
world
foo
bar
awk1line.txt
- sau đó một lần nữa, vì vậy có nhiều thủ đoạn awk :)
Đây là một giải pháp loại bỏ tất cả các dòng trống hoặc chỉ chứa các ký tự khoảng trắng:
grep -v '^[[:space:]]*$' foo.txt
Thử đi: sed -i '/^[ \t]*$/d' file-name
Nó sẽ xóa tất cả các dòng trống có bất kỳ không có. khoảng trắng (dấu cách hoặc tab) tức là (0 hoặc nhiều hơn) trong tệp.
Lưu ý: có 'dấu cách' theo sau là '\ t' bên trong dấu ngoặc vuông.
Công cụ sửa đổi -i
sẽ buộc ghi lại nội dung cập nhật trong tệp. Nếu không có cờ này, bạn có thể thấy các dòng trống đã bị xóa trên màn hình nhưng tệp thực tế sẽ không bị ảnh hưởng.
grep '^..' my_file
thí dụ
THIS
IS
THE
FILE
EOF_MYFILE
nó chỉ đưa ra các dòng có ít nhất 2 ký tự.
THIS
IS
THE
FILE
EOF_MYFILE
Xem thêm kết quả với grep '^' my_file
đầu ra
THIS
IS
THE
FILE
EOF_MYFILE
và cả với grep '^.' my_file
đầu ra
THIS
IS
THE
FILE
EOF_MYFILE
Nếu loại bỏ các dòng trống có nghĩa là các dòng bao gồm bất kỳ khoảng trắng nào, hãy sử dụng:
grep '\S' FILE
Ví dụ:
$ printf "line1\n\nline2\n \nline3\n\t\nline4\n" > FILE
$ cat -v FILE
line1
line2
line3
line4
$ grep '\S' FILE
line1
line2
line3
line4
$ grep . FILE
line1
line2
line3
line4
Xem thêm:
Perl có thể quá mức cần thiết, nhưng nó cũng hoạt động tốt.
Loại bỏ tất cả các dòng hoàn toàn trống:
perl -ne 'print if /./' file
Loại bỏ tất cả các dòng hoàn toàn trống hoặc chỉ chứa khoảng trắng:
perl -ne 'print if ! /^\s*$/' file
Biến thể chỉnh sửa bản gốc và tạo tệp .bak:
perl -i.bak -ne 'print if ! /^\s*$/' file
Nếu bạn muốn biết tổng số dòng mã trong dự án Xcode của mình và bạn không quan tâm đến việc liệt kê số lượng cho mỗi tệp nhanh thì điều này sẽ cho bạn câu trả lời. Nó loại bỏ các dòng không có mã nào cả và loại bỏ các dòng có tiền tố là chú thích//
Chạy nó ở cấp cơ sở của dự án Xcode của bạn.
find . \( -iname \*.swift \) -exec grep -v '^[[:space:]]*$' \+ | grep -v -e '//' | wc -l
Nếu bạn có các khối nhận xét trong mã của mình bắt đầu bằng /*
và kết thúc bằng */
:
/*
This is an comment block
*/
thì những thứ này sẽ được tính vào số lượng. (Quá khó).
Câu trả lời đơn giản nhất -----------------------------------------
[root@node1 ~]# cat /etc/sudoers | grep -v -e ^# -e ^$
Defaults !visiblepw
Defaults always_set_home
Defaults match_group_by_gid
Defaults always_query_group_plugin
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
[root@node1 ~]#