Treat the input as a set of lines, each terminated by a zero byte (the ASCII ‘NUL’ character) instead of a newline.
入力を一連の行として扱い、各行は改行ではなくゼロバイト(ASCIIの 'NUL'文字)で終了します。
[0addr]:label
This function does nothing; it bears a label to which the `b` and `t` commands may branch.
[2addr]N
Append the next line of input to the pattern space, using an embedded newline character to separate the appended material from the original contents. Note that the current line number changes.
Sed Addresses
An address is not required, but if specified must be a number (that counts input lines cumulatively across input files), a dollar (``$'') character that addresses the last line of input, or a context address (which consists of a regular expression preceded and followed by a delimiter).
[2addr]!function
[2addr]!function-list
Apply the function or function-list only to the lines that are not selected by the address(es).
[2addr]b[label]
Branch to the `:` function with the specified label. If the label is not specified, branch to the end of the script.
Why
テキスト中の改行コードを文字列の
\n
に置換したい。How
GNU sed
BSD sed
What
sed
は1行ごとにパターンスペースに取り込んで処理を行うが、その際に改行コードは含まれない。 そのため、通常では置換できないのでそれぞれ以下のオプション・コマンドを使う。GNU sed
z
オプションにより、改行コードが置換できるようになる。 sed, a stream editorBSD sed
最終行まで各行をパターンスペースに追加するループを実行し、(
-e ':a' -e 'N' -e '$!ba'
) パターンスペースに追加された入力全体に対して置換を行う。(-e 's/\n/\\n/g'
)-e ':a'
ラベル。後述の
b
で使用する。ラベル名はa
でなくても良い。-e 'N'
パターンスペースに次の行を取り込む。改行コードが含まれるようになる。
-e $!ba
$
は最終行を示すアドレス。!
はアドレスにマッチしない場合のみコマンドを実行する。b
は指定したラベルa
に分岐するコマンド。Ref