web-dev-qa-db-ja.com

シェルスクリプトで行が空かどうかをテストするにはどうすればよいですか?

次のようなシェルスクリプトがあります。

cat file | while read line
do
    # run some commands using $line    
done

行に空白以外の文字([\ n\t])が含まれているかどうかを確認する必要があります。含まれていない場合はスキップします。これどうやってするの?

30
planetp

readはデフォルトで空白で区切られたフィールドを読み取るため、空白のみを含む行では変数に空の文字列が割り当てられるはずです。したがって、次のように空の行をスキップできます。

[ -z "$line" ] && continue
62
Arkku

これを試して

while read line;
do 

    if [ "$line" != "" ]; then
        # Do something here
    fi

done < $SOURCE_FILE
10
NSC

バッシュ:

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"
2
ghostdog74
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
0
Rounak