Bash: 读取包含空格的行并保留空格

4

我正在尝试从包含多行的文件中读取文本。我想要识别只包含空格的行。 根据定义,空行是空的,并且不包含任何内容(包括空格)。 我想要检测那些看起来为空但实际上不为空的行(只包含空格的行)。

    while read line; do
        if [[ `echo "$line" | wc -w` == 0 && `echo "$line" | wc -c` > 1 ]];
        then
             echo "Fake empty line detected"
        fi
    done < "$1"

但是由于read函数会忽略字符串开头和结尾的空格,所以我的代码无法运行。
一个文件的示例。
hi
 hi
(empty line, no spaces or any other char)
hi
  (two spaces)
hey

请帮我修复代码

2个回答

7

通过清空IFS(内部字段分隔符)的值来禁用单词拆分:

while IFS= read -r line; do
....
done < "$1"
-r 不是必须的,但这是一个好习惯。
另外,检查 line 值的更简单方法(我假设你正在寻找只有空白符的行):
if [[ $line =~ ^$ ]]; then
    echo "Fake empty line detected"
fi

你不需要使用正则表达式来检查一行是否为空。[[ -z $line ]] 可以轻松地完成这个任务。 - gniourf_gniourf

1
根据您的代码,它可以改进。
while read line; do
        if [ -z "$line" ]
        then
             echo "Fake empty line detected"
        fi
done < "$1"

测试-z检查$line是否为空。

输出:

Fake empty line detected
Fake empty line detected

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接