Bash命令删除并添加文件中的行?

时间:2013-10-08 09:07:34

标签: bash sed awk grep

我在linux服务器上有一个大文件。同一个文件在linux客户端上。 将定期修改服务器文件。我希望能够只下载更改并将其应用到客户端上的文件中。我想知道是否有一些内置的linux命令来做这样的事情。不幸的是,我不相信rsync是一个选项。 “客户端”是linux的嵌入式版本,具有以下内容:

 [, [[, arping, ash, awk, basename, brctl, bunzip2, bzcat, cat, chgrp, chmod, chown, chroot, clear, cmp, cp, crond,
    crontab, cut, date, dd, df, dirname, dmesg, du, echo, egrep, env, expr, false, fgrep, find, free, fsync, grep, gunzip,
    gzip, halt, head, hexdump, hostid, hwclock, id, ifconfig, init, insmod, kill, killall, klogd, less, ln, lock, logger,
    logread, ls, lsmod, md5sum, mkdir, mkfifo, mknod, mktemp, mount, mv, nc, netmsg, netstat, nice, nslookup, ntpd, passwd,
    pgrep, pidof, ping, ping6, pivot_root, pkill, poweroff, printf, ps, pwd, reboot, reset, rm, rmdir, rmmod, route, sed,
    seq, sh, sleep, sort, start-stop-daemon, strings, switch_root, sync, sysctl, syslogd, tail, tar, tee, telnet, telnetd,
    test, time, top, touch, tr, traceroute, true, udhcpc, umount, uname, uniq, uptime, vconfig, vi, watchdog, wc, wget,
    which, xargs, yes, zcat

我想知道最有效的选择是在服务器上创建一个文件,文件中有任何新行以“+”开头,任何删除的行都以“ - ”开头,任何修改后的行都是“ - ”和“+”......然后以某种方式获取awk,sed和/或grep以根据“diff”文件更新文件。我无法想象我正在做的事情是那么独特。有什么指针吗?

1 个答案:

答案 0 :(得分:0)

使用diffpatch执行此操作。这些老式工具很小,可以广泛使用。我会用这种方式使用它们:

# server:
diff -wu oldfile newfile > file.patch

# now copy the patch file from server to client

# client:
patch < file.patch

很容易。但是你可以通过各种选项获得更多的动力(我只是用-w来表示忽略空格)。