1

我的问题很容易复制,我只在 OSX 上使用与 10.8.3 捆绑在一起的默认版本“tr”对其进行了测试。

每当我做一个:

git diff --numstat <sha1> <sha2>

结果如下:

1       1       test.php

注意这些字符之间的分隔字符都是空格。现在,当我将该命令直接通过管道传递到 tr 以按如下方式挤出这些空间时:

git diff --numstat <sha1> <sha2> | tr -s ' '

它会导致所有空格都转换为一个制表符(我试图将其粘贴到此处,但实际上并没有用)。

问题是,如果我正确地记得我的 bash,这根本不是预期的行为。此外,当我尝试通过将其放入文本文件中来复制它时,对文本文件进行 cat-ing 并通过相同的管道对其进行 tr-ing,它确实按预期工作。

有谁知道这是为什么,你将如何优雅地解决它?

我的最终目标是在 python 中解析这些结果,如果两个数字和文件名之间只有一个空格,这会容易得多。

4

1 回答 1

2

我很确定这些不是输出行中的空格。当我发出包含制表符的行时,我可以复制您的问题。试试这个修改:

git diff --numstat <sha1> <sha2> | tr -s ' \t' '  '

第一组是空格和制表符,第二组是两个空格。

于 2013-04-17T17:28:09.207 回答