上一个: Line group formats, 上层: diff options


A.11.1.2 行格式

行格式控制着如何将输入文件中的每一行输出为 if-then-else 格式的行组的一部分。

例如,下面的命令输出的文本在左侧有一个单列更改指示。第一列输出为 `-' 代表 删除的行,`|' 代表添加的行,空格是未修改的行。格式中包含换行字符是因为需要 输出换行。

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

指定行格式,要使用下面的选项。你应该引注 format,这是因为通常包含 shell 字符。

`--old-line-format=format'
从第一个文件格式化行。
`--new-line-format=format'
从第二个文件格式化行。
`--unchanged-line-format=format'
格式化两个文件共有的行。
`--line-format=format'
格式化所有的行; 也就是同时设定上面的选项。

在行格式里面,普通字符代表它们自己; 以 `%' 开始转换规格有下面的形式。

`%l'
代表行的内容,不含末尾的换行(如有)。此格式忽略未完成的行。
`%L'
代表行的内容,包含末尾的换行(如有)。如果行是不完整的,此格式保持其未完状态。
`%%'
代表 `%' 字符。
`%c'C''
其中 C 是单独的字符,代表 CC 不应该是反斜扛或省略号。 例如,`%c':'' 代表冒号。
`%c'\O''
其中 O 是 1,2 或 3 这样的八进制数字字符串,代表字符的八进制编码。例如, `%c'\0'' 代表 null 字符。
`Fn'
其中 Fprintf 的转换规格,代表 F 格式化的行号。例如, `%.5dn' 使用 printf"%.5d" 格式打印行号。 参阅 Line group formats, 了解更多 printf 的转换格式。

默认的行格式是 `%l' 和一个换行符。

如果输入包含制表符,并且重要的是在输出里面排列行,你应确保行格式里面的 `%l' 或 `%L' 紧跟在制表符后面(如,在 `%l' 或 `%L' 前有制表符), 或者使用 `-t' 或 `--expand-tabs' 选项。

总之,行格式与行组格式让你指定不同的格式,例如,下面命令使用类似 diff 的普通格式。你可以修剪这个命令用于控制 diff 的输出。

     cvs 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='' \
        myfile