2012-08-27 20 views
5

我想看到文件中间的段落和包含单个段落的文件之间的diff管sed到diff

该段的文件foo的行60和文件bar只包含该段落可能存在的细微差异。

我可以这样使用sed来提取该段:sed -n 60,60p foo。我如何在diff中使用这个?

以下工作:

sed -n 60,60p foo | diff bar # diff: missing operand after `foo` 
diff bar `sed -n 60,60p foo` # diff: extra operand `in` 

我可以这样做:

sed -n 60,60p foo >> tempfile; diff bar tempfile 

是否有不要求我暂时存放的地方使用管道的解决方案?

回答

9

如果使用“ - ”作为文件的说法,diff会从标准输入读取:

sed -n 60,60p foo | diff bar - 
+3

而不仅仅是'diff';伪文件名'-'表示许多上下文中的标准输入,包括但不限于GNU'coreutils',Perl和(经常)Python。 – tripleee

7

你可以使用进程替换:

diff bar <(sed -n 60,60p foo) 

这也可以用来比较输出来自两个过程:

diff <(sed -n 60,60p bar) <(sed -n 60,60p foo) 
+0

这是非常有用的知道 – 2cupsOfTech

+0

似乎不工作在一个bash文件tho? –

+0

@thepickle:它在这里做 – Thor