0

ファイルに 1 行に 3 つの単語が含まれ、各単語の間にスペースが 1 つだけ含まれているかどうかを確認しようとしています。各行の前後にスペースを入れることはできません。また、txt ファイルの行数は関係ありません。次に、ファイルの形式が正しくない場合、「次の行の形式が正しくありません」と出力され、不正な行が出力されます。

前もって感謝します。

4

4 に答える 4

1

次の方法で使用できます。

if [ $(sed '/^[ ]\?\(\([a-zA-Z_]\+ \)\{2\}[a-zA-Z_]\+\)/d' a.txt | wc -l) != 0 ] ; then
    echo "error in file"
    exit 1
fi

sed を使用して、問題のないすべての行を削除します。その後、ファイル サイズが変わらない0場合は、ファイルにエラーがあるはずです。

于 2013-10-01T14:17:07.830 に答える
0

これを試して

awk 'NF!=3{bad[k++]=$0} 
     END{print "Bad file format following lines were formatted incorrectly:";
         for (i in bad){print i}}' file
于 2013-10-01T14:43:58.933 に答える
0

ファイル内の行をループして、正規表現を使用して各行が要件に一致することを確認できます。

#!/bin/bash
while IFS= read -r line
do
   if [[ ! $line =~ ^[^[:space:]]+\ [^[:space:]]+\ [^[:space:]]+$ ]]
   then
       echo "invalid line: $line"
   fi
done < file

無効な各行を出力します。

^[^[:space:]]+\ [^[:space:]]+\ [^[:space:]]+$は、各単語の間にスペースが 1 つだけあり、行頭または行末にスペースがない 3 つの単語に一致する正規表現です。

于 2013-10-01T14:41:06.723 に答える