我有一個shell腳本是這樣的:如何測試shell腳本中的行是否爲空?
cat file | while read line
do
# run some commands using $line
done
現在我需要檢查,如果行中包含任何非空白字符([\ n \ T]),如果不是,跳過它。 我該怎麼做?
我有一個shell腳本是這樣的:如何測試shell腳本中的行是否爲空?
cat file | while read line
do
# run some commands using $line
done
現在我需要檢查,如果行中包含任何非空白字符([\ n \ T]),如果不是,跳過它。 我該怎麼做?
由於read
讀取由默認空格分隔的字段,只含有空格應該導致空字符串的一行被分配到變量,所以你應該能夠跳過空行只:
[ -z "$line" ] && continue
慶典:
if [[ ! $line =~ [^[:space:]] ]] ; then
continue
fi
而且使用done < file
代替cat file | while
,除非你知道你爲什麼會用後者。
我需要的不便,將在這兩個bash和sh的工作。有什麼解決方案使用sh/sed/tr(如果沒有安裝bash)? – planetp 2010-04-05 11:41:19
if ! grep -q '[^[:space:]]' ; then
continue
fi
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"
試試這個
while read line;
do
if [ "$line" != "" ]; then
# Do something here
fi
done < $SOURCE_FILE
請添加一些解釋,而不僅僅是代碼。 – 2012-10-16 18:29:50
有關方括號表示法的更多信息,請參見[測試手冊頁](http://man.cx/test) – c0dem4gnetic 2012-10-16 18:35:33
(更準確地說,'read'使用的分隔符由'IFS'變量決定,默認爲空白,只需將'IFS'恢復爲空白即可)。 – Arkku 2010-04-05 12:23:03
所有優點都很簡單:) – planetp 2010-04-05 12:41:00
更簡單:無需要引用行,如果你使用bash的[[syntax:'[[-z $ line]] && continue' – pihentagy 2013-10-10 16:08:24