Next: , Previous: Line Group Formats, Up: If-then-else

2.6.2 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-character change indicator to the left of the text. The first character 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 \
     ' \
     ' \
        --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.

formats lines just from the first file.
formats lines just from the second file.
formats lines common to both files.
formats all lines; in effect, it sets all three above options simultaneously.

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

stands for the contents of the line, not counting its trailing newline (if any). This format ignores whether the line is incomplete; See Incomplete Lines.
stands for the contents of the line, including its trailing newline (if any). If a line is incomplete, this format preserves its incompleteness.
stands for ‘%’.
where C is a single character, stands for C. C may not be a backslash or an apostrophe. For example, ‘%c':'’ stands for a colon.
where O is a string of 1, 2, or 3 octal digits, stands for the character with octal code O. For example, ‘%c'\0'’ stands for a null character.
where F is a printf conversion specification, stands for the line number formatted with F. 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 normal diff format. You can tailor this command to get fine control over diff output.

     diff \
        --old-line-format='< %l
     ' \
        --new-line-format='> %l
     ' \
     %<' \
     %>' \
     %>' \
        --unchanged-group-format='' \
        old new