質問

My issue is very simple to replicate, and I've only tested it on OSX with the default version of "tr" that comes bundled with 10.8.3.

Whenever I do a:

git diff --numstat <sha1> <sha2>

it results in the following:

1       1       test.php

Notice how the separating character between the ones are all spaces. Now, when I pipe that command directly into a tr to squeeze those spaces out as follows:

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

It results in all the spaces being converted to one single tab character (I tried to paste it here but it didn't actually work).

The thing is, if I recall my bash correctly, this is not expected behavior at all. Also, when I tried to replicate this by putting this in a text file, cat-ing the text file and tr-ing it through the very same pipe, it does work as expected.

Does anyone know why this is and how would you work around it gracefully?

My end goal is to parse these results in python, which is significantly easier if there's only one space separating the two numbers and the file name.

役に立ちましたか?

解決

I'm pretty sure those are not spaces in your output line. I can duplicate your problem when I emit a line containing tab characters. Try this modification:

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

The first group is a space and tab character, the second group is two spaces.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top