Contents|Index|Previous|Next

Line Formats

Line formats control how each line taken from an input file is output as part of a line group in if-then-else format. For example, the following command outputs text with a one-column change indicator to the left of the text. The first column of output is '-' for deleted lines, '|' for added lines, and a space for unchanged lines. The formats contain newline characters where newlines are desired on output.

diff \
--old-line-format='-%l
' \
--new-line-format='|%l
' \
--unchanged-line-format=' %l
' \
old new

To specify a line format, use one of the following options. You should quote format, since it often contains shell metacharacters.

'--old-line-format=format'
Formats lines just from the first file.

'--new-line-format=format'
Formats lines just from the second file.

'--unchanged-line-format=format'
Formats lines common to both files.

'--line-format=format'
Formats all lines; in effect, it simultaneously sets all three of the previous options.

In a line format, ordinary characters represent themselves; conversion specifications start with '%' and have one of the following forms.

'%l'
Stands for the the contents of the line, not counting its trailing newline (if any). This format ignores whether the line is incomplete; see Incomplete Lines.

'%L'
Stands for the the contents of the line, including its trailing newline (if any). If a line is incomplete, this format preserves its incompleteness.

'%%'
Stands for '%'.

'%c' C''
Stands for C, where C is a single character. C may not be a backslash or an apostrophe. For example, '%c':'' stands for a colon.

'%c'\ O''
Stands for the character with octal code O where O is a string of 1, 2, or 3 octal digits. For example, '%c'\0'' stands for a null character.

'Fn '
Stands for the line number formatted with F where F is a printf conversion specification. For example, '%.5dn' prints the line number using the printf format, "%.5d". See Line Group Formats for more about printf conversion specifications.

The default line format is '%l' followed by a newline character.

If the input contains tab characters and it is important that they line up on output, you should ensure that '%l' or '%L' in a line format is just after a tab stop (e.g., by preceding '%l' or '%L' with a tab character), or you should use the '-t' or '--expand-tabs' option.

Taken together, the line and line group formats let you specify many different formats. For example, the following command uses a format similar to diff's normal format. You can tailor this command to get fine control over diff's output.

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