テキストファイルから特定の行を印刷するために、次の解決策が見つかりました。
sed '123!d;q' file
この場合、最初の入力行以降にsedが終了しないのはなぜですか?
答え1
英語でこのsed
プログラムは次のことを意味します。各行について
- [
123!
]現在の行番号が123でない場合は、[d
]現在の行を削除して次のサイクルを開始します(つまり、次の行に進みます)。 d
その後(コマンドが実行されていない場合はこの時点に達した場合のみ)、[q
]は行を処理せずに終了します(ただし、死の間に現在の行を印刷します)。
あるいは、必要に応じてシェル構文を使用することもできます。
line_number=0
while IFS= read -r pattern_space; do
line_number=$(($line_number+1))
if [ $line_number -ne 123 ]; then # 123!
continue # d
fi
echo "$pattern_space"; break # q
echo "$pattern_space" # implicit final print (never reached)
done