在 Linux 中查看文件并过滤空行
在 Linux 中查看文件内容时过滤掉空行有多种方法,以下是几种常用的方法:
方法 1:使用 grep
grep -v '^$' filename
-v
:反转匹配,只显示不匹配的行'^$'
:表示空行的正则表达式(行首后立即为行尾)
要同时过滤掉仅含空格或制表符的行:
grep -v '^[[:space:]]*$' filename
方法 2:使用 sed
sed '/^$/d' filename
/^$/d
:删除空行(d 表示 delete)
要同时过滤掉空白字符行:
sed '/^[[:space:]]*$/d' filename
方法 3:使用 awk
awk 'NF' filename
NF
:表示"字段数量",当行内容为空时,NF=0,评估为假,因此不打印
显示行号:
awk 'NF {print NR, $0}' filename
方法 4:使用 cat + grep
cat -s filename | grep -v '^$'
-s
:压缩连续的空白行为单行(但不会完全删除)
方法 5:使用 printf
或 echo
测试
# 测试字符串
printf "Line1\n\nLine3\n" | grep -v '^$'
# 输出结果:
# Line1
# Line3
高级技巧:保留格式同时过滤空行
带行号显示
grep -n '[^[:space:]]' filename | grep -v '^[[:space:]]*$'
处理多文件
grep -v '^$' file1 file2 file3
编辑文件时删除空行
# 使用 sed 原地编辑
sed -i '/^[[:space:]]*$/d' filename
# 安全备份版本
sed -i.bak '/^[[:space:]]*$/d' filename
统计非空行数
grep -c '[^[:space:]]' filename
处理特殊文件
# 处理 Windows 格式文件(CRLF)
grep -v $'^[[:space:]]*\r$' windows_file.txt
# 处理 tab 分隔文件
awk -F'\t' 'NF > 0' tab_file.tsv
永久配置忽略空行
编辑 .bashrc
添加别名:
# 添加到 ~/.bashrc
alias nlcat="awk 'NF {print NR, \$0}'"
alias nocat="grep -v '^[[:space:]]*$'"
重新加载配置:
source ~/.bashrc
使用别名:
nocat filename # 显示无空行文件
nlcat filename # 带行号显示无空行文件
实际应用示例
假设有文件 example.txt
内容:
First line
Second line with space after:
Third line with tab
Last line
使用高级过滤:
grep -v '^[[:space:]]*$' example.txt
输出:
First line
Second line with space after:
Third line with tab
Last line
这些方法可以根据具体需求选择使用,grep -v '^$'
是最简单常用的方法,而 grep -v '^[[:space:]]*$'
或 awk 'NF'
则更全面,能够过滤掉所有空白行。