文件的比较与备份

diff命令用于比较两个文件之间的区别。

    diff命令在比较两个文件时(新版本的diff支持比较二进制文件),会逐行对两个文件的异同进行比较输出。

相同文件名进行比较。

语法:diff [选项] 文件1/目录1 文件2/目录2

选项

-b 不检查空格字符的不同。
-B 不检查空白行。
-c 显示全部内文,并标出不同之处。
-i 不检查大小写的不同。
-r 比较子目录中的文件。

[root@CentOS7 ~]# diff -c  /root/tail.txt /data/tail.txt 
*** /root/tail.txt	2018-04-14 10:45:28.658504821 +0800
--- /data/tail.txt	2018-04-14 10:45:12.840503600 +0800
***************
*** 1,3 ****
  aaa
  aaa
! aaabc
--- 1,3 ----
  aaa
  aaa
! aaabb

-u  选项来进行还原,也可以用patch命令进行对修改过的文件备份。

语法:diff -u 文件 备份>文件(将文件还原至备份)

              patch -d 文件 备份     (将修改过后的内容添加至备份)

行编辑器sed

    sed命令用于处理编辑行内的内容。sed工具在执行时,一次处理一行的内容。处理时,sed会将行中的内容读入临时的缓冲区(模式空间),然后对缓冲区中的内容进行处理,并不会修改源文件。处理后再将处理完毕的内容输出,然后读入下一行内容。

语法:sed [选项] '地址命令' 文件

选项

-n:不输出模式空间内容到屏幕,即不自动打印
-e:   多点编辑
-f:  /PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
-r:    支持使用扩展正则表达式
-i.bak: 备份文件并原处编辑

    地址

#: 指定的行,$:最后一行


/pattern/:被此处模式所能够匹配到的每一行


n,m: 第n行到第m行


n,+m: 第n行到n+m行


/pat1/,/pat2/: 被两个模式匹配的行之间


n,/pat1/: 第n行到被模式匹配的行


n~m:从第n行开始。每隔m行匹配一次

    命令: 

d: 删除模式空间匹配的行,并立即启用下一轮循环
p:打印当前模式空间内容,追加到默认输出之后
a [\]text:在指定行后面追加文本---|
i [\]text:在行前面插入文本--------|-支持使用\n实现多行追加
c [\]text:替换行为单行或多行文本-|
w 文件: 保存模式匹配的行至指定文件
r 文件:读取指定文件的文本至模式空间中匹配到的行后
=: 为模式空间中的行打印行号
!:模式空间中匹配行取反处理

s/find/replace/mark

mark

g: 行内全局替换
p: 显示替换成功的行
w 文件:将替换成功的行保存至文件中

使用ifconfg命令查看指定网卡的ipv4地址

[root@CentOS7 ~]# ifconfig ens33 | sed -n '2p' | sed -r 's@.*inet (addr:)?(.*)  (Bcast|netmask).*@\2@'
192.168.30.2

高级编辑命令

P:打印模式空间开端至\n内容,并追加到默认输出之前
h: 把模式空间中的内容覆盖至保持空间中
H:把模式空间中的内容追加至保持空间中
g: 从保持空间取出数据覆盖至模式空间
G:从保持空间取出内容追加至模式空间
x: 把模式空间中的内容与保持空间中的内容进行互换
n: 读取匹配到的行的下一行覆盖至模式空间
N:读取匹配到的行的下一行追加至模式空间
d: 删除模式空间中的行
D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环

将文本文件的n和n+1行合并为一行,n为奇数行

[root@CentOS7 data]# seq 1 10 | sed 'N;s/\n/ /'
1 2
3 4
5 6
7 8
9 10