######################文本处理工具awk grep sed...#########################
1.
1.diff比较两个文件的不同 diff [option] file1(旧) file2(新)
diff -u file file.new >file.path##生成补丁文件
diff -r ki1 ki2 ##比较目录
yum install patch -y##安装打补丁工具
patch-b file file.path##给老软件打补丁,且对老软件进行备份
2.grep##过滤字符
-i##或略大小写
-n##显示结果所在行的行号
-c##结果个数
-v##反向过滤
-r 关键字目录##在目录中过滤含有关键字的文件
-E "关键字1|关键字2|....."##过滤多个关键字
3.sort##排序
-n##纯数字
-r##倒序
-u##去掉重复行
-t##指定分隔符
-k##指定排序的列
-b ##ignore-leading-blanks
4.tr ##转换字符大小写
tr 'a-z' 'A-Z'<file##把file中所有小写字符转换成大写
5.sed [选项]‘[动作]’ 文件名 ##控制流输出
-i #edit files in place直接更改文本内容 -n #sed一般把所有的数据输出到屏幕 加此选项只会对经过sed处理的的行为输入到屏幕
-e #允许多条sed命令编辑
sed '2i xiao' /etc/passwd #在第2行前添加xiao
sed '2a xiao' /etc/passwd #在第2行后添加xiao
sed '2c xiao' /etc/passwd #在替换第二行为xiao
sed 3d passwd##不显示文件中的第三行
sed 3,7d file##不显示文件中的3-7行
sed 3,7p file ##重复显示文件中的3-7行
sed -n 3,7p file ##只显示文件中的3-7行
sed 's/nologin/westos/g' /etc/passwd#替换输出中的nologin为westos
sed '1,5s/nologin/westos/g' /etc/passwd##替换输出中1-5行的nologin为wesots
sed '/games/,/nobody/s/nologin/westos/g' passwd##替换输出中的games字符到nobody字符之间的nologin为westos
sed -e 's/nologin/westos/g' -e 's/sbin/lee/g' passwd##多条替换策略用-e连接
[root@westos mnt]# cat rule ##规则文件内容
s/nologin/westos/g
s/sbin/lee/g
[root@westos mnt]# sed -f rule file ##使用规则文件更改输出
1root:x:0:0:root:/root:/bin/bash
2bin:x:1:1:bin:/bin:/lee/westos
3daemon:x:2:2:daemon:/lee:/lee/westos
4adm:x:3:4:adm:/var/adm:/lee/westos
6.cut cut[-bn][file]或cut[-c][file] cut[-df][file] ###cut用于 “剪切 ”文件中的文本字段或列并将其显示到标准输出
-c ##以字符为单位进行分割
-d ##指定用于提取字段的分隔符默认tab
-f ##指定要从每行提取的字段 与-d一起使用
-b ##以字节为单位进行分割 忽略多字节字符边界
-n ##取消分割多字节字符 仅与-b一起使用
7.awk awk ‘{pattern + action}’ {filenames}
(1)命令行方式 awk [-F filed-separetor] ‘commands’ input-file(s)其中command为awk真正命令 [-F域分隔符]是可选的 input-files待处理文件 默认域分隔符为空格
例 :last -n 5 |awk ‘{print $1}’ 工作流程 : 读入有\n换行符的一条记录 然后将记录按指定的分隔符划分区域$0代表所有域$1代表第1个域...默认分隔符 空格或 tab
cat /etc/passwd | awk 'BEGIN{FS=":"} {printf $1 "\t" $7 "\n" }'
例:cat /etc/passwd |awk -F ":" '{print $1 "\t" $7}'输出第一和第七个域
例 : cat /etc/passwd | awk -F ‘:’ ’BEGIN {print “name shell“} {print $1 “, “ $7}
END{print “blue,bin/bash”}’
输出 name, shell
root,/bin/bash
bin , /bin/sh
.....
blue,bin/bash
工作流程 :先执行BEGIN然后读取文件 读如\n换行符分隔的一条记录 然后将记录按指定域说出 然后执行模式对应的action接着读第二条记录 。。直到读完所有记录 最后执行END
cat /etc/passwd|awk -F ':' '$3>1024' | awk -F ':' 'BEGIN {print "name shell"} {print $1 "\t" $7 "\n"}'
name shell
nfsnobody/sbin/nologin
例子: grep -Ei 'sh$|bash$|csh$' passwd | sed 's/bash/csh/g'|sort -n -t : -k 4|awk -F : '{print $1"\t" $7}'
root /bin/csh
kiosk /bin/csh
helon /bin/csh
grep -Ei 'sh$|bash$|csh$' passwd | sed 's/bash/csh/g'|sort -n -t : -k 4
root:x:0:0:root:/root:/bin/csh
kiosk:x:1000:1000:kiosk:/home/kiosk:/bin/csh
helon:x:1002:1002::/home/helon:/bin/csh
ifconfig br0 | sed -n 2,5p|grep netmask|cut -d " " -f 16
172.25.254.255
7.uniq##处理重复行 输出无重复的行
-c##统计重复行的个数
-u##显示唯一的行
-d##显示重复了的行