linux diff 远程文件,登录diff命令,以单独的文件输出在linux

编辑:与以下原始答案相同,但避免选项在HP-UX上不受diff支持。使用类似:

diff -b -r -w /tmp/one.txt /tmp/two.txt \

| sed -n -e '/c/ {s/[^c]*c\(.*\)/\1 p/;p}' \

| sed -n -f - /tmp/two.txt > /tmp/changed.txt

diff -b -r -w /tmp/one.txt /tmp/two.txt \

| sed -n -e '/a/ {s/[^a]*a\(.*\)/\1 p/;p}' \

| sed -n -f - /tmp/two.txt > /tmp/new.txt

此行号输出转换从diff到sed打印(p)为增加(a)和变更的命令(c)行范围。生成的sed脚本将应用于第二个文件以仅打印所需的行。 (我希望HP-UX sed从标准输入接收脚本支持-f -)

似乎有是不需要从diff输出解释行号的解决方案。 diff支持--side-by-side格式(-y),其中包括分别用和|标记旧,新和改变的线条的排水槽。您可以使用--width=1(或-W1)将此并排格式减少为标记。如果您使用已更改的标记和新的标记(grep -v)并在第二个文件的行前加上(paste),则可以通过前缀标记筛选(grep)并丢弃标记(cut)。您可以为新文件和更改文件执行此操作。

这里是一个自包含的“脚本”为例:

# create two example files (one character per line)

echo abcdefghijklmnopqrstuvwxyz | grep -o . > /tmp/one.txt

echo abcDeFghiJKlmnopPqrsStuvVVwxyzZZZ | grep -o . > /tmp/two.txt

# diff side-by-side to get markers and apply to new file

diff -b -r -w -y -W1 /tmp/one.txt /tmp/two.txt \

| fgrep -v '

| grep -e '^|' | cut -c3- > /tmp/changed.txt

diff -b -r -w -y -W1 /tmp/one.txt /tmp/two.txt \

| fgrep -v '

| grep -e '^>' | cut -c3- > /tmp/new.txt

# dump result

cat /tmp/changed.txt

echo ---

cat /tmp/new.txt

它的输出是

D

F

J

K

---

P

S

V

V

Z

Z

Z

我希望这可以帮助您解决问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值