レコードサイズが一致しない場合は、sedを使用して報告してください。 [閉じる]

レコードサイズが一致しない場合は、sedを使用して報告してください。 [閉じる]

sedサイズが21以外のファイルの最初のレコードをどのように報告しますか?

sedファイル全体をスキャンし、サイズが21以外の最初のレコードを見つけたらすぐに終了したくありません。

答え1

ベース前の質問に答えるには

sed -n '/^.\{21\}$/! {p;q;}' file

答え2

使用awk(最も簡単です):

awk 'length != 21 { printf("Line of length %d found\n", length); exit }' file

またはシェルスクリプトの一部として

if ! awk 'length != 21 { exit 1 }' file; then
    echo 'Line of length != 21 found (or awk failed to execute properly)'
else
    echo 'All lines are 21 characters (or the file is empty)'
fi

使用sed:

sed -nE '/^.{21}$/!{p;q;}' file

GNUを使えsedばできます

if ! sed -nE '/.{21}$/!q 1' file; then
   echo 'Line with != 21 characters found (or sed failed to run properly)'
else
   echo 'All lines are 21 characters (or file is empty)'
fi

答え3

GNUの使用grep:

if line=$(grep -Exnvm1 '.{21}' < file); then
  printf >&2 'Found "%s" which is not 21 characters long\n' "$line"
fi

-n上記の内容には行番号が含まれています)

関連情報