Sedコマンドは、46行ごとにファイルの1行と14行を印刷します。

Sedコマンドは、46行ごとにファイルの1行と14行を印刷します。

したがって、テキストファイルを解析して1行と14行を印刷してから、15〜46行では何もせずに47行と60行を印刷するようにファイルの最後まで印刷します。したがって、デフォルトでは、46行ごとに1行と14行を印刷し、EOFまで46行ごとに繰り返します。

答え1

GNU sedの使用第一歩〜第一歩アドレス範囲拡張:

sed -n '1~46p; 14~46p;' file

答え2

awkタグに該当する内容があるため、回避策を提供しますawk

awk '(NR%46==1||NR%46==14){print}' file

答え3

POSIXが機能していませんsed

sed 'H;1h;$!d;x;y/\n#/#\n/;s/\(#[^#]*\)\{12\}#\([^#]*\)\([^#]*#\)\{33\}/#\2##/g;s/\(.*\)##.*/\1/;s/##/#/g;y/\n#/#\n/'

sed他のツールがより適している場合、これらのタスクに一般的なPOSIXを使用することは意味がないと思いますが、実際の作業に必要ないくつかの有用な要素がここにあるので、説明を追加します。

  • H;1h;$!d;xパターン空間からファイル全体を収集するパターンで、しばしば便利です(GNUではsedoptionsで置き換えることができます-z)。どのように動作するかを把握できます。
  • y/\n#/#\n/改行文字を別の文字(この場合#)に置き換えます。 「改行文字を除くすべての文字」などの表現が必要な場合は、回避策として処理の前後にこれを実行してください。繰り返しますが、GNUでは許可されているsedため、GNUでは必要ありません。[^\n]
  • コマンドの奇妙なパターンは、行の内容であるs12 + 1 + 33 = 46 #(以前の改行)と45と一致します。[^#]*すべての行は変更されずに保持され、12行が削除され、1行が維持され、\233行が削除されます。これは世界中で行われます。これ##は、末尾の行を削除するために行われます。

関連情報