このページの内容

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