文件格式化处理

替换、删除、新增、提取特定行

分析关键字的使用,统计

sed 工具

sed [-nefr] [动作]

-n:经过sed处理的行被列出来
-e:命令行模式进行sed编辑
-f:直接将sed动作写在一个文件内,-f filename 可以执行filename中的sed动作
-r:sed动作支持扩展型正则表达式
-i:直接修改读取的文件内容,而非屏幕输出

动作:
a:新增
c:替换
d:删除
i:插入
p:打印
s:替换(可搭配正则表达式)

(1)以行为单位增加删除

如:

列出并打印行号,同时删除2~5行

nl file | sed '2,5d'

列出并打印行号,同时删除3~最后一行

nl file | sed '3,$d'

第2行后面增加‘hello world’

nl file | sed '2d, hello world'

第2行前面增加‘hello world’

nl file | sed '2i, hello world'

(2)以行为单位替换与显示

如:

将2~5行内容替换成No 2-5 number

nl file | sed '2,5c No 2-5 number'

列出5~7行

nl file | sed -n '5,7p'

(3)部分数据的查找与替换

sed 's/要被替换的字符串/新的字符串/g'

如:一行字符串为:

intel addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

想要得到192.168.1.100,可以这样写

sed 's/^.*addr://g' | sed 's/Bcast.*$//g'

删掉空白行

sed '/^$/d'

(4)直接修改文件内容(危险操作)

如:

将每一行结尾的.替换成!

sed -i 's/\.$/!/g' file

最后一行添加“This is a test”

sed -i '$a This is a test'

awk 工具

词频统计

awk -F '\t' '{count[$1]++}END{for(i in count){print i count[i]}}'

diff

比较两个文件或者两个目录之间的差异

diff [-bBi] from-file to-file

patch

和diff配合使用,用于新旧版本更新

Thanks for your support!