管道sed到差异

sim*_*ont 5 macos diff sed pipe

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

该段落在60文件的行上foo,文件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`
Run Code Online (Sandbox Code Playgroud)

我可以:

sed -n 60,60p foo >> tempfile; diff bar tempfile
Run Code Online (Sandbox Code Playgroud)

有没有一个解决方案不要求我暂时使用管道存储?

Mat*_*ias 10

如果使用' - '作为文件参数,diff将从stdin读取:

  sed -n 60,60p foo | diff bar -
Run Code Online (Sandbox Code Playgroud)

  • 而且不仅仅是`diff`; 伪文件名`-`表示许多上下文中的标准输入,包括但不限于GNU`coreutils`,Perl和(通常)Python. (3认同)

Tho*_*hor 8

您可以使用进程替换:

diff bar <(sed -n 60,60p foo)
Run Code Online (Sandbox Code Playgroud)

这也可以用来比较两个进程的输出:

diff <(sed -n 60,60p bar) <(sed -n 60,60p foo)
Run Code Online (Sandbox Code Playgroud)