我正在尝试从包含多行的文件中读取行。我想识别只包含空格的行。 根据定义,空行为空,不包含任何内容(包括空格)。 我想检测似乎是空的行,但它们不是(仅包含空格的行)
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
请帮我修复代码
答案 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