文本处理工具
1.grep
[Globally search a Regular Expression and Print]
- grep
grep -E =egrep ##扩展的grep
grep格式:
grep key file ##搜索key在file中
默认贪婪模式
-i ##忽略大小写
grep -i root passwd
-v ##反向过滤
grep root passwd -v ##反向筛选
-E ##扩展表达式
grep -E “root|luqq” passwd ##可过滤多个参数
grep -E “root>” passwd ##后禁止
grep -E “<root” paswd ##禁止贪婪模式,前禁止
root$ ##root结尾
grep root$ passwd
^root ##root开头
grep ^root passwd
-5 ##前五行和后五行
grep -5 chroot passwd
-B5 ##前五行
grep -B5 chroot passwd
-A5 ##后五行
grep -A5 chroot passwd
-n ##显示匹配所在行号
grep -n chroot passwd
- 实验环境:cp /etc/passwd passwd
vim passwd
grep root passwd
w.s ##中间有一个字符
“we*s” ##e出现次数为0-任意次
we?s ##e出现0-1次
{0-3} ##出现0~3次
w(ef)*s ##ef出现0~任意次
we+s ##出现次数大于1
^westos ##以westos开头
westos$ ##以westos结尾
{,n} ##出现0~n次
{m,} ##最少m次 - grep ^we westos
grep es$ westos
grep w…s westos
grep wes westos
grep -E “we{1,}” westos
grep -E "we" westos
grep -E “wes" westos
grep -E “we?s” westos
grep -E “we+s” westos
grep -E “we{,4}s” westos
grep -E “we{4,}s” westos
grep -E "w(ef)” westos
grep -E “<bash$|<sh$” /etc/passwd | cut -d : -f 1 ##筛选可以su - 切换的用户
sed
-
sed 5p westos ##输出
-n ##不输出模式空间内容
sed -n 5p passwd
-5,7p ##5到7行
sed -n 5,7p passwd ##输出5到7行
-e “5p;7p” ##5和7行
sed -n ‘5p;7p’ passwd ##输出五和七行
-e ‘5,$p’ ##5~任意行
sed -ne ‘1,$p’ passwd ##输出1到任意行
-e “/bash/P”
sed -ne ‘/bash/p’ passwd ##输出含有bash的行
sed -e ‘5,$d’ westos ##删除第五行之后内容 -
d 删除
sed ‘/^#/d’ fstab ##删除以#开头的行
sed ‘/^UUID/d’ fstab ##删除以UUID开头的行
sed -e ‘5,$d’ ##删除第五行之后的行 -
a 添加
sed -e ‘$a hello world’ fstab ##在fstab末添加helloworld
sed -e ‘$a hello\nworld’ fstab ##在fstab末添加helloworld并换行
sed -e ‘/^#/a hello\nworld’ fstab ##在以#开头的行hello westos’ 插入 -
c 更改 处理整行
sed -e ‘/^#/c hello world’ fstab ##更改#开头为helloworld
sed -e ‘5c hello world’ westos ##修改第五行为helloworld -
w 把符合的内容写入指定文件中
sed ‘/^UUID/w westosf’ westos ##把以UUID开头的行输出到westosf中 -
i ##更改
sed ‘5ihello world’ westos ##修改第五行
sed ‘1chello world’ westos -i westos ##-i后台加载,不显示 -
r 整合文件
sed ‘2r westos’ westos ##将westos整合至westos第二行 -
sed 字符替换
sed 's/t/f/g’ passwd ##替换所有的行和列的t为f
sed ‘s/sbin/westos/g’ passwd ##将所有的sbin替换为westos
sed ‘5,7s/sbin/westos/g’ passwd ##替换第五行到第七行的sbin为westos
sed -e ‘s@/@####@’ -i passwd ##-i 把sed处理的内容保存到westos文件中
sed ‘7,$s/sbin/westos/g’ passwd ##将第七行之后sbin转换为westos
sed -e ‘s/sbin/westos/g;s/nologin/lee/g’ passwd ##两个指令要用;连接
sed -e ‘s///####/’ passwd ##将所有的/转换为###
sed -e ‘s@/@####@’ passwd ##用@包裹不用写转义字符
sed ‘/lp/,/halt/s/sbin/westos/g’ passwd ##将lp,halt之间行的所有列的sbin转换为westos
3.awk
-
begin ##awk处理前执行的事情
end ##awk处理后执行的事情
NR ##全部列数
NF ##全部行数
FILENAME ##文件名称 -
awk -F : ‘{print $1}’ passwd ##输出passwd的第一列
awk -F : ‘{print $0}’ passwd ##输出passwd文件的全部
awk -F : ‘BEGIN{print “WESTOS”}{print $1}’ passwd ##输出passwd的第一列,并在执行前输出westos
awk -F : ‘BEGIN{print “WESTOS”}{print $1}END{print “END”}’ passwd ##输出passwd的第一行,并在执行前输出westos,并在执行后输出end
awk -F : ‘BEGIN{print “WESTOS”}{print NR}END{print “END”}’ passwd ##输出passwd的行数
awk -F : ‘BEGIN{print “WESTOS”}{print NF}END{print “END”}’ passwd ##输出passwd的列数
awk -F : ‘BEGIN{print “WESTOS”}{print FILENAME}END{print “END”}’ passwd ##输出passwd的文件名
awk -F : ‘BEGIN{print “WESTOS”}/bash$/{print $1,$7}END{print “END”}’ passwd ##输出1至7行中以bash结尾的行
awk // F : ‘BEGIN{print “WESTOS”}/bash$/||/root/{print $1,$7}END{print “END”}’ passwd ##条件在执行动作之前写,用//隔出,找出第一行到第七行以bash结尾的awk -F : ‘BEGIN{print “WESTOS”}/bash$|root/{print $1,$7}END{print “END”}’ passwd ##两个元素,或者用|相连,表示同一条件的或
awk -F : ‘$7~//bin/bash/{print $0}’ passwd ##看作第七列是/bin/bash
awk -F : ‘$7!~//bin/bash/{print $0}’ passwd ##第七列不是/bin/bash /其中/需转义