次のようなシェルスクリプトがあります。
cat file | while read line
do
# run some commands using $line
done
ここで、行に空白以外の文字 ([\n\t]) が含まれているかどうかを確認し、含まれていない場合はスキップする必要があります。これどうやってするの?
デフォルトでは空白で区切られたフィールドを読み取るためread
、空白のみを含む行は変数に割り当てられる空の文字列になるはずなので、次のようにして空の行をスキップできるはずです。
[ -z "$line" ] && continue
これを試して
while read line;
do
if [ "$line" != "" ]; then
# Do something here
fi
done < $SOURCE_FILE
bash:
if [[ ! $line =~ [^[:space:]] ]] ; then
continue
fi
後者を使用する理由がわからない場合は、done < file
の代わりに使用してください。cat file | while
cat
while readループを使用している場合、この場合は役に立ちません。空の行をスキップしたいのか、少なくとも空白を含む行をスキップしたいのかわかりません。
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"
if ! grep -q '[^[:space:]]' ; then
continue
fi
awk 'NF' file | while read line
do
# run some commands using $line
done
同様の質問に対するこの回答を盗みました: sedを使用して空の行を削除する