2.6.2 行書式
行書式は、入力ファイルから取り出した各行を、if-then-else書式の行グループの一部としてどのように出力するかを制御します。
たとえば、次のコマンドはテキストの左側に1文字の変更記号を付けて出力します。出力の先頭文字は、削除された行では「-」、追加された行では「|」、変更されていない行ではスペースです。書式には、出力で改行させたい位置に改行文字が含まれています。
diff \ --old-line-format='-%l ' \ --new-line-format='|%l ' \ --unchanged-line-format=' %l ' \ old new
行書式を指定するには、次のいずれかのオプションを使います。formatにはシェルのメタ文字が含まれることが多いため、引用符で囲んでください。
- --old-line-format=format
最初のファイルだけにある行を整形します。
- --new-line-format=format
2番目のファイルだけにある行を整形します。
- --unchanged-line-format=format
両方のファイルに共通する行を整形します。
- --line-format=format
すべての行を整形します。実質的には、上の3つのオプションを同時に指定することになります。
行書式では、通常の文字はその文字自身を表します。変換指定は「%」で始まり、次のいずれかの形になります。
- ‘%l’
行の内容を、末尾の改行がある場合はそれを除いて表します。この書式は、行が不完全かどうかを考慮しません。不完全な行を参照してください。
- ‘%L’
行の内容を、末尾の改行がある場合はそれも含めて表します。行が不完全な場合、この書式はその不完全さを保持します。
- ‘%%’
「%」を表します。
- ‘%c'C'’
Cが1文字であるとき、Cを表します。Cはバックスラッシュやアポストロフィにはできません。たとえば「%c':'」はコロンを表します。
- ‘%c'\O'’
Oが1〜3桁の8進数字の文字列であるとき、8進コードOを持つ文字を表します。たとえば「%c'\0'」はヌル文字を表します。
- ‘Fn’
Fが
printfの変換指定であるとき、行番号をFで整形して表します。たとえば「%.5dn」は、printf書式"%.5d"を使って行番号を出力します。printfの変換指定について詳しくは、行グループ書式を参照してください。
既定の行書式は、「%l」の後に改行文字を続けたものです。
入力にタブ文字が含まれ、出力で位置を揃えることが重要なら、行書式の「%l」または「%L」がタブ位置の直後になるようにしてください(たとえば「%l」または「%L」の前にタブ文字を置きます)。あるいは、-tまたは--expand-tabsオプションを使ってください。
行書式と行グループ書式を組み合わせると、さまざまな書式を指定できます。たとえば次のコマンドは、diffのnormal書式に似た書式を使います。このコマンドを調整することで、diffの出力を細かく制御できます。
diff \ --old-line-format='< %l ' \ --new-line-format='> %l ' \ --old-group-format='%df%(f=l?:,%dl)d%dE %<' \ --new-group-format='%dea%dF%(F=L?:,%dL) %>' \ --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL) %<--- %>' \ --unchanged-group-format='' \ old new