文件的比较与备份
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