下一个: , 上层: diff options


A.11.1.1 行组格式

行组格式让你指定格式,以适应允许 if-then-else 输入的应用程序,包括编程语言和 文本格式语言。行组格式指定输出格式是类似行连续的组。

例如,以下命令比较 TeX 文件 myfile 在仓库里面的最初版本,输出一个合并的 文件,其旧区域被 `\begin{em}'-`\end{em}' 包围,新区域被 `\begin{bf}'-`\end{bf}' 包围。

     cvs diff \
        --old-group-format='\begin{em}
     %<\end{em}
     ' \
        --new-group-format='\begin{bf}
     %>\end{bf}
     ' \
        myfile

下面命令与上面例子相同,除了显示更多的信息,因为它拼出默认的行组格式。

     cvs diff \
        --old-group-format='\begin{em}
     %<\end{em}
     ' \
        --new-group-format='\begin{bf}
     %>\end{bf}
     ' \
        --unchanged-group-format='%=' \
        --changed-group-format='\begin{em}
     %<\end{em}
     \begin{bf}
     %>\end{bf}
     ' \
        myfile

这里是更高级的例子,输出的比较列出包含“简单英语”类型的头。

     cvs diff \
        --unchanged-group-format='' \
        --old-group-format='-------- %dn line%(n=1?:s) deleted at %df:
     %<' \
        --new-group-format='-------- %dN line%(N=1?:s) added after %de:
     %>' \
        --changed-group-format='-------- %dn line%(n=1?:s) changed at %df:
     %<-------- to:
     %>' \
        myfile

要指定行组格式,使用上面列出选项中的一个。你可以最多指定四个行组格式,每种一个。 你应该引注 format,这是因为通常会包含 shell 字符。

`--old-group-format=format'
这些行组是只含从第一个文件取出行的块。如果指定的变更组格式,旧组格式默认与其 相同; 否则格式是输出行组的原样。
`--new-group-format=format'
这些行组是只含从第二个文件取出行的块。如果指定的变更组格式,新组格式默认与其 相同; 否则格式是输出行组的原样。
`--changed-group-format=format'
这些行组是包含从所有文件取出行的块。默认的变更组格式是新旧组格式的连接。
`--unchanged-group-format=format'
这些行组包含所有文件共同的行。默认未变更行组格式是行组输出的原样。

在行组格式里面,普通字符代表它们自己; 习惯上采用 `%' 开始的字符指定规格, 如下。

`%<'
代表第一个文件里面的行,包括结尾的换行。每行的格式取决于旧行格式 (参阅 Line formats)。
`%>'
代表第二个文件里面的行,包括结尾的换行。每行的格式取决于新行格式。
`%='
代表两个文件里面共有的行,包括结尾的换行。每行的格式取决于未修改的行格式。
`%%'
代表 `%' 字符。
`%c'C''
其中 C 是单独的字符,代表 CC 不应该是反斜扛或省略号。例如, `%c':'' 代表冒号,即使是在 if-then-else 格式里面的 then 部分, 冒号通常是终止。
`%c'\O''
其中 O 是 1,2 或 3 这样的八进制数字字符串,代表字符的八进制编码。 例如,`%c'\0'' 代表 null 字符。
`Fn'
其中 Fprintf 的转换规格,n 是后续字符,代表用 F 格式化的 n 值。
`e'
在旧文件组之前的行号。
`f'
在旧文件组中第一行的行号; 等于 e + 1。
`l'
旧文件组中最后一行的行号。
`m'
旧文件组之后的行号; 等于 l + 1。
`n'
旧文件组中的行号; 等于 l - f + 1。
`E, F, L, M, N'
新文件中类似的行号。

printf 转换规格可以是 `%d', `%o', `%x' 或 `%X', 分别指定十进制,八进制,小写十六进制,大写十六进制输出。在 `%' 之后的选项 可以按次序出现: `-' 指定左对齐; 整数指定区域最小宽度; 句点后面可选的整数 指定数字的最小个数。例如,`%5dN' 打印组里面新行的行号,要 5 个字符的宽度, 采用了 printf"%5d" 的格式。

`(A=B?T:E)'
如果 A 等于 BT 否则是 EAB 要么是十进制常量,要么是上面解释的字符。此格式规定如果 A 的值等于 B 的值那么就等于 T; 否则等于 E

例如,`%(N=0?no:%dN) line%(N=1?:s)',如果 N (新文件组中行号) 是 0, 那么等于 `no lines',如果 N 是 1,则为 `1 line',其他的为 `%dN lines'。