次のようなシェルスクリプトがあります。
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
バッシュ:
if [[ ! $line =~ [^[:space:]] ]] ; then
continue
fi
そして、done < file
の代わりに cat file | while
、後者を使用する理由がわからない場合。
cat
while読み取りループを使用している場合、この場合は役に立ちません。空の行をスキップしたいのか、少なくとも空白を含む行をスキップしたいのかわからない。
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
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