我有一个像这样的shell脚本:
cat file | while read line
do
# run some commands using $line
done
现在我需要检查该行是否包含任何非空格字符([\ n \ t \ t]),如果不包含,则跳过它。 我怎么能这样做?
答案 0 :(得分:62)
由于read
默认情况下读取空格分隔的字段,因此仅包含空格的行应该会将空字符串分配给变量,因此您应该只能跳过空行:
[ -z "$line" ] && continue
答案 1 :(得分:9)
试试这个
while read line;
do
if [ "$line" != "" ]; then
# Do something here
fi
done < $SOURCE_FILE
答案 2 :(得分:5)
击:
if [[ ! $line =~ [^[:space:]] ]] ; then
continue
fi
并使用done < file
代替cat file | while
,除非您知道为什么要使用后者。
答案 3 :(得分:2)
if ! grep -q '[^[:space:]]' ; then
continue
fi
答案 4 :(得分:2)
cat
如果你在读取循环中使用,我在这种情况下无用。我不确定你是否想要跳过空的行,或者你想跳过也至少包含空格的行。
i=0
while read -r line
do
((i++)) # or $(echo $i+1|bc) with sh
case "$line" in
"") echo "blank line at line: $i ";;
*" "*) echo "line with blanks at $i";;
*[[:blank:]]*) echo "line with blanks at $i";;
esac
done <"file"
答案 5 :(得分:0)
blank=`tail -1 <file-location>`
if [ -z "$blank" ]
then
echo "end of the line is the blank line"
else
echo "their is something in last line"
fi