bash:读取行并保留空格

时间:2013-12-25 21:27:52

标签: bash space

我正在尝试从包含多行的文件中读取行。我想识别只包含空格的行。 根据定义,空行为空,不包含任何内容(包括空格)。 我想检测似乎是空的行,但它们不是(仅包含空格的行)

    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 个答案:

答案 0 :(得分:7)

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

while IFS= read -r line; do
....
done < "$1"

-r并非绝对必要,但这是一种很好的做法。


另外,检查line的值的一种更简单的方法(我假设你正在寻找一条只有空格的行):

if [[ $line =~ ^$ ]]; then
    echo "Fake empty line detected"
fi

答案 1 :(得分: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