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

#### 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 \
       --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 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.

`%l`
  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.
`%L`
  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 `%`.
`%c'C'`
  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.
`%c'\O'`
  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.
`Fn`
  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
    ' \
       --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