ファイルに 1 行に 3 つの単語が含まれ、各単語の間にスペースが 1 つだけ含まれているかどうかを確認しようとしています。各行の前後にスペースを入れることはできません。また、txt ファイルの行数は関係ありません。次に、ファイルの形式が正しくない場合、「次の行の形式が正しくありません」と出力され、不正な行が出力されます。
前もって感謝します。
次の方法で使用できます。
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
場合は、ファイルにエラーがあるはずです。
これを試して
awk 'NF!=3{bad[k++]=$0}
END{print "Bad file format following lines were formatted incorrectly:";
for (i in bad){print i}}' file
ファイル内の行をループして、正規表現を使用して各行が要件に一致することを確認できます。
#!/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 つの単語に一致する正規表現です。