- grep
grep文本过滤命令=Global search regular expression and print out the line 全面搜索研究正则表达式并显示出来
grep 匹配条件 处理文件
grep root passwd 搜索root
grep ^root passwd 搜索root开头
grep root$ passwd 搜索root结尾
grep -i root passwd 搜索root不管大小写
grep -E "root|ROOT" passwd 搜索root和ROOT(-E 可以识别|)
grep -Ei “root” passwd 抓取root不分大小写
grep -Ei “root$” passwd 抓取root结尾不分大小写
grep -Ei “^root” passwd 抓取root开头不分大小写
grep -Ei “^root|root$” passwd 抓取root开头或root结尾不分大小写
grep -Ei “^root|root$” passwd -v 除过root开头和结尾的
grep -Ei “^root|root$” passwd -v | grep root 除过root开头和结尾的 包含root的
grep -Ei “^root|root$” passwd -v | grep root -n 除过root开头和结尾的 包含root的, 输出行号
grep ROOT passwd -n 显示行号
grep ROOT passwd -2 显示前后两行
grep ROOT passwd -A1 显示后面一行
grep ROOT passwd -B1 显示前面一行
grep中的正则表达式
grep ^westos
grep westos$
grep 'w...s' file grep x...y file 搜索xy中间有三个字符的
grep 'w...' file grep x... file 搜索x后有三个字符的
grep '...s' file grep ...y file 搜索y前有三个字符的
grep中字符的匹配次数设定
\* 字符出现[0-任意次]
\? 字符出现[0-1次]
\+ 字符出现[1-任意次]
\{n\} 字符出现[n次]
\{m,n\} 字符出现[至少m次,最多出现n次]
\{0,n\} 字符出现[0-n次]
\{m,\} 字符出现[至少m次]
\(xy\)\{n}xy 关键字出现[n次]
.* 关键字之间匹配任意字符
grep中字符的匹配位置设定
^关键字
关键字$
\<关键字
关键字\>
\<关键字\>
grep x*y emp x出现0-任意次,+y
grep x.y emp xy中间跟一个字符
grep -E x?y emp y前紧跟0-1个x
grep -E x+y emp y前紧跟1到任意个x
grep -E x{1}y emp y前有一个x
grep -E “<x{1}y” emp y前有一个x,且在行首
grep -E “x{1}y>” emp y前有一个x,且在行末
grep -E “<x{2}y>” emp 一行只有,y前有二个x
grep -E “x{1,}y” emp y前有1到任意个x
grep -E “(xy){1,}” emp xy个数1到任意
- sed
sed 行编辑器=stream editor
sed -n ‘/:/p’ fstab 显示含有:行
sed -n ‘/4$/p’ fstab 显示4结尾行
sed -n ‘/^UUID/p’ fstab 显示UUID开头行
sed -n ‘2,6p’ fstab 显示2-6行
sed -n ‘2,6!p’ fstab 不显示2-6行
sed -n ‘2p;6p’ fstab 显示2行和6行
-n 只显示,屏蔽模式空间内的数据
不加-n 多显示,将选择的内容显示一次,再将文件内容显示一次,相当于选择内容显示两次
sed ‘/^#/d’ fstab 不显示#开头行
sed ‘/4$/d’ fstab 不显示4结尾行
sed ‘1,4d’ fstab 不显示1-4行
sed ‘1d;4d’ fstab 不显示14行
sed ‘/^UUID/!d’ fstab 显示UUID开头行
a 添加
sed ‘/^UUID/ahello world’ fstab UUID开头行之后添加hello world
sed ‘/^UUID/ahello\nworld’ fstab UUID开头行之后添加hello和world行
i 插入
sed ‘/^UUID/ihello world’ fstab UUID开头行之前插入hello world
sed ‘/^UUID/ihello\nworld’ fstab UUID开头行之前插入hello和world行
c 改变
sed ‘/^UUID/chello world’ fstab UUID开头行替换为hello world
w 写入
sed ‘/^UUID/w /mnt/westosfile123’ fstab UUID开头行写入到westosfile123 显示
sed -n ‘/^UUID/w /mnt/westosfile456’ fstab UUID开头行写入到westosfile456 不显示
= 行号
sed ‘/^#/=’ fstab 以#开头行加入行号
sed ‘/^#/=’ -i fstab 以#开头行加入行号输入到fstab文件
sed '/^[0-9]/d' -i fstab 以数字开头行不显示输入到fstab文件(还原上一步骤文件)
sed ‘4r /mnt/test’ fstab 将test文件加入到fstab第四行之后
sed -n ‘/^#/=’ fstab 以#开头的行加入行号,不显示
sed -n -e '/^UUID/=' -e '/^#/=' fstab 执行第一个和第二个,不显示 -->sed -n '/^UUID/=;/^#/=' fstab
sed -e '/^UUID/=' -e '/^#/=' fstab 执行第一个和第二个 显示 -->sed '/^UUID/=;/^#/=' fstab
sed ‘/^#/=’ fstab > file1 以#开头的行加行号导入到法file1文件(必须存在),不改变fstab文件内容
sed ‘/^#/=’ -i fstab 给fstab文件中以#开头的行加行号
加行号不能使用/w写入文件
> 不更改本身内容
-i 可更改本身内容
vim rule
/^UUID/d 以UUID开头的不显示
/^#/cwestos 以#开头的替换为westos
sed -f rule fstab 对于fstab执行rule规则
sed ‘s/^//#/g’ /etc/fstab 将/etc/fstab全文以/做为开头的/替换为#
sed ‘s@^/@#@g’ /etc/fstab 将/etc/fstab全文以/做为开头的/替换为#
sed ‘s///#/g’ /etc/fstab 将/etc/fstab全文的/替换为#
sed ‘1,4s/#//g’ /etc/fstab 将/etc/fstab中1-4行的#全部替换成空
sed ‘s/sbin/westos/g;s/nologin/lee/g’ passwd
sed ‘/lpeeeeep/,/sbiiiiin/s/?@/g;’ passwd 将lpeeeeep到sbiiiiin的:替换为@
sed ‘/lpeeeeep/,/sbiiiiin/s/?#/g;10,12s/?%/g’ passwd 将lpeeeeep到sbiiiiin的:替换为@,将10-12行:替换为%
sed ‘G’ passwd 显示passwd文件每一行后边加一个空行
sed ‘$!G’ passwd 显示每一行后边加一个空行,最后一行不加
sed ‘=’ passwd 显示行号在每一行的上一行
sed ‘=’ passwd | sed ‘N;s/\n//g’ #sed逐行加载,加N;表示加载此行时同时下一行,\n表示换行符
sed ‘=’ passwd | sed ‘N;s/\n/ /g’
sed -n ‘$P’ fstab 显示最后一行,与tail -n 1意思相同
- awk 报告生成器
awk会逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行做一些总结性质的工作,在命令格式上分别体现如下:
BEGIN{}:读入第一行文本之前执行,一般用来初始化操作
{}:逐行处理,逐行读入文本执行相应的处理,是最常见的编辑指令块
END{}:处理完最后一行文本之后执行,一般用来输出处理结果
awk ‘{print FILENAME}’ passwd 处理文件passwd中每一行内容就打印一次文件名,有多少行就会显示多少行文件名
awk -F : ‘{print NF}’ passwd 以 : 做为分隔符,打印文件中每行内容的列数
awk ‘{print NR}’ passwd 打印passwd文件每行的行号
awk -F : ‘{print NF,NR}’ passwd 打印passwd文件行数和列数
awk ‘BEGIN{print “NAME”}’ passwd 开头打印字符NAME
awk ‘BEGIN{print “NAME”}{print NR}’ passwd 开头打印字符NAME,每行的行号
awk -F : ‘BEGIN{print “NAME”}{print NF}END{print"END"}’ passwd 以 :做为分隔符,开头输出NAME,输出列数,结尾打印字符END
awk -F : ‘BEGIN{print “NAME”}{print $1}END{print"END"}’ passwd 以 : 做为分隔符,开头输出NAME,输出第一列内容,末尾输出END
awk -F : ‘BEGIN{print “NAME”}{print $1,$7}END{print"END"}’ passwd 以: 做为分隔符,开头输出NAME,输出1、7列内容,末尾输出END
awk -F : ‘BEGIN{print “NAME”}{print $1$7}END{print"END"}’ passwd 以 :做为分隔符,开头输出NAME,输出1、7列内容,不区分,末尾输出END
awk -F : ‘BEGIN{print “NAME”}{print $0}END{print"END"}’ passwd 以 : 做为分隔符,开头输出NAME,输出全部内容,末尾输出END
awk -F : ‘BEGIN{print “NAME”}{print $1="";print $0}END{print"END"}’ passwd 将第一列置为空输出全部
awk -F : ‘BEGIN{print “NAME”}{print $1="";print $0}END{print"END"}’ passwd | sed 's/ /:/g’将第一列置为空输出全部,替换空为:
awk -F : ‘BEGIN{n=1}{print $2,n}’ passwd 打印第二列和n(n=1)
awk -F : ‘BEGIN{n=1}{print $2,n++}’ passwd 打印第二列和n(n自加1)
awk -F : ‘BEGIN{n=0}/bash$/{n++}END{print n}’ passwd 打印以bash结尾多少行
awk -F : ‘BEGIN{n=1}{print n++,$1}END{print NR}’ passwd 以 : 做为分隔符,打印n(n自加1)和第一列,末尾打印行数
awk ‘BEGIN{a=12;print a+13}’ passwd 打印a=12,a+13的结果
awk ‘/bash/{print}’ passwd 抓取有bash的行
awk -F : ‘/bash/{print $1}’ passwd 以 : 做为分隔符,抓取有bash的行并输出第一列
awk ‘!/bash$/{print}’ passwd 抓取不以bash结尾的行
awk ‘/^root/{print}’ passwd 抓取以root开头的行
awk ‘/bash$/{print}’ passwd 抓取以bash结尾的行
awk ‘/^bin|bash$/{print}’ passwd 抓取以bin开头或者以bash结尾的行
awk ‘/^root/&&/bash$/{print}’ passwd 抓取以root开头且以bash结尾的行
awk ‘!/^root/&&!/bash$/{print}’ passwd 抓取不以root开头且不以bash结尾的行
awk 'NR==3{print}' passwd 打印第三行
awk 'NR>=4&&NR<=6{print}' passwd 打印4-6行
awk 'NR==4||NR==6{print}' passwd 打印4、6行
awk '/^[a-d]/{print}' passwd 抓取以a-d开头的行
awk '/^[^a-d]/{print}' passwd 抓取不以a-d开头的行
awk -F : '$2~/root$/{print}' passwd 抓取第二列以root结尾的行
awk -F : '$6!~/root$/{print}' passwd 抓取第六列不以root结尾的行
awk -F : ‘$6~/bin/{print}’ passwd 抓取第六列含有bin的行
awk -F : ‘$6~/<bin/{print}’ passwd 抓取第六列为bin,bin前无字符的行