したがって、テキストファイルを解析して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ではsed
optionsで置き換えることができます-z
)。どのように動作するかを把握できます。y/\n#/#\n/
改行文字を別の文字(この場合#
)に置き換えます。 「改行文字を除くすべての文字」などの表現が必要な場合は、回避策として処理の前後にこれを実行してください。繰り返しますが、GNUでは許可されているsed
ため、GNUでは必要ありません。[^\n]
- コマンドの奇妙なパターンは、行の内容である
s
12 + 1 + 33 = 46#
(以前の改行)と45と一致します。[^#]*
すべての行は変更されずに保持され、12行が削除され、1行が維持され、\2
33行が削除されます。これは世界中で行われます。これ##
は、末尾の行を削除するために行われます。