このsedコマンドはどのように機能しますか?

このsedコマンドはどのように機能しますか?

テキストファイルから特定の行を印刷するために、次の解決策が見つかりました。

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

おすすめ記事