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
上記の内容には行番号が含まれています)