37

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

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

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

4

7 に答える 7

80

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

[ -z "$line" ] && continue
于 2010-04-05T12:16:22.867 に答える
16

これを試して

while read line;
do 

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

done < $SOURCE_FILE
于 2012-10-16T18:23:39.860 に答える
6

bash:

if [[ ! $line =~ [^[:space:]] ]] ; then
  continue
fi

後者を使用する理由がわからない場合は、done < fileの代わりに使用してください。cat file | while

于 2010-04-05T11:38:46.310 に答える
2

catwhile 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"
于 2010-04-05T12:33:16.170 に答える
1
if ! grep -q '[^[:space:]]' ; then
  continue
fi
于 2010-04-05T11:47:41.313 に答える
0
awk 'NF' file | while read line
do
    # run some commands using $line    
done

同様の質問に対するこの回答を盗みました: sedを使用して空の行を削除する

于 2022-01-15T13:49:02.103 に答える