grep 文本过滤命令
grep全称 Global search regular expression and print out the line,全面搜索正则表达式并显示出来,grep 命令是一种强大的文本搜索工具,根据用户指定的“模式“对目标文本进行匹配检查,打印匹配到的行,由正则表达式或者字符及基本文本字符所编写的过滤条件
基本正则表达式和扩展正则表达式
ls /etc/ | grep -E *.conf = ls /etc/ egrep *.conf
grep -E “root|ROOT” passwd ##寻找root和大写的root(ROOT)

grep -Ei “root” passwd ##寻找root,不区分大小写

grep -Ei “^root” ##寻找以root开头的行,不区别大小写

grep -Ei “root$” ##寻找以root结尾的行,不区分大小写
grep -Ei "^root|root$" passwd ##寻找以root开头和root结尾的行,不区分大小写

grep -Ei "^root|root$" passwd -v | grep root ##寻找在某行中间位置的root -v:除了
grep -Ei "^root|root$" passwd -v ##寻找除了在某行开头的root和某行末尾的root,搜索出来包括没有root的行

grep ROOT passwd -n ##寻找含ROOT的行的行号

grep ROOT passwd -2 ##显示搜到的结果的上下两行

grep ROOT passwd -n2 ##显示搜到的结果的上下两行,并标示出行号

grep ROOT passwd -A1 ##显示搜到的结果的下面一行

grep ROOT passwd -B1 ##显示搜到的结果的上面一行

grep 中字符匹配位置的设定
grep 默认模式是贪婪模式
grep 从贪婪模式中退出 \<关键字 关键字\> \<关键字\> 会把前后的字符不显示,但是注意,如果遇到/情况会不生效,可能把/当成分隔符来识别了
grep中字符匹配次数设定
| 参数 | 解释说明 |
|---|---|
| . | x…y x和y之间有两个字符 .表示一个字符 |
| x*y | 表示x出现0-任意次,*之前的字符出现0-任意次 |
| x?y | 出现0-1次 |
| + | 出现1-任意次 |
| {n} | 字符出现n次,并解除贪婪模式,前后都不显示其他的 |
| {m,n} | 字符至少出现m次,最多出现n次 |
| {m,} | 字符至少出现m次 |
| .* | 关键字之间匹配任意字符 |
grep -E “\<x{1}y” westos ##x至少出现一次,解除贪婪模式

grep -E “\xy{1}” westos ##y至少出现一次,解除贪婪模式

grep -E “\(xy){1}” westos ##xy至少出现一次,解除贪婪模式

sed
p模式
sed -n '/\:p'fstab ##只显示带有:的行

sed -n '/^#/p' fstab ##只显示以#开头的行

sed '/^UUID/p' fstab ##不仅显示UUID开头的行,还显示模式空间里的所有内容,所以会出现两行UUID

sed -n '/UUID$/p' fstab ##显示以UUID结尾的行

sed -n '2,6p' fstab ##显示第二行到第六行

sed -n '2,6!p' fstab ##不显示第二行到第六行

sed -n '2p;6p' fstab ##只显示第二行和第六行

d模式操作
sed '/^UUID/d' fstab ##删除以UUID开头的行

sed '1,4d' fstab ##删除fstab的第1到4行
sed '1d;4d' fstab ##删除fstab的第1行和第四行

c模式
sed '/^#/chellowestos' fstab ##将fstab中以#号开头的行更改为hellowestos

a模式
sed '/^#/ahellowestos' fstab ##在fstab文件以#开头行的末尾加入hellowestos

sed '/^#/ahello\nwestos' fstab ##在fstab文件以#开头的莫为加入hello westos (两行,\n表示换行)
i模式
sed '/^#/ihellowestos' fstab ##在fstab文件以#开头行的前面添加hellowestos

sed '/^#/ihello\nwestos' fstab ##在fstab文件以#开头行的前面添加hellowestos(两行,\n表示换行)

w模式
sed '/^#/w /mnt/westosfile' fstab ##将fstab里面以#开头的行写入到/mnt/westosfile ,并且显示模式空间里的内容


sed -n '/^#/w /mnt/westosfile' fstab ##将fstab里面以#开头的行写入到/mnt/westosfile,不显示模式空间里面的内容

sed '/^#/=' fstab ##给fstab加入行号

sed '/^[0-9]/d' fstab ##删除以数字开头的行,-i fstab 导入到fstab,如果此时使用> fstab,会把fstab文件清空
sed '6r fstab' -i westos ##把fstab中以#开头的行整合到westos这个文件的第6行

sed '6r fstab' westos -i westos ##这样整合打开westos文件会发现出现两遍fstab中以#开头的内容

sed '6r fstab' westos > westos ##这样会清空westos文件
sed的其他用法
sed -n '/^UUID/'=fstab ##屏蔽模式空间里的其他内容,只显示以UUID开头的行

sed -n -e '/^UUID/p' -e '/^#/d'=fstab ##-e起到分号的作用,,表示显示
##sed -n -e '/^UUID/p' -e '/^#/=' fstab 这个命令也可以写在一个文件里面,就是运行的规则
##vim rule 在文件中写入要运行的规则,比如/^UUID/p/ (换行)/^#=
##sed -f rule fstab ##对fstab文件执行rule(文件名)里的规则
sed 'G' passwd ##在每一行后加空行

sed '$G' passwd ##只在最后一行后加空格

sed '$!G' passwd ##在每一行后加空行除了第一行

sed '=' passwd | sed 's/\n//'##目的是将空行去掉,但是sed在工作的时候只加载一行,不会读到下一行,读第一行的话没有读取到换行符,就不存在替换换行符号这个说法

sed '=' passwd | sed 'N;s/\n//' ##N:提前与加载下一行的内容,这样就会识别到换行符,就会进行替换

sed -n '$p' passwd ##显示最后一行 tail -n 1 passwd 也可以实现


sed 's/#//g' fstab ##将fstab中的#去掉,sed 's/#/$/g' fstab;将fstab中的#替换成$,g是替换所有列中识别到的内容(起全部替换的作用),不加g只会替换该行第一个匹配到的字符。

sed '1,5s/#//g' fstab ##将第一行到第五行的#去掉
sed -e '1s/#//g' -e '5s/#//g' fstab ##将第一行和第5行的#替换掉

sed 's/\//$/g' fstab ##将fstab中的/替换为$ ,其中 \/表示对/进行转义,否则无法识别/ \表示转义

sed 's/^\//$/g' fstab ##将fstab中以/开头的行替换为$

sed 's@/@###@g'fstab ##@是分割符,相当于‘/’,将/替换为###

sed 's/sbin/westos/g' passwd ##将psswd中的sbin替换为westos


sed 's/sbin/westos/g;s/nologin/lee/g' passwd ##多条命令的同时替换

sed '/adm/,/halt/s/sbin/westos/g' passwd ##只对adm到halt之间出现的sbin替换为westos,用于指定的范围的替换

awk
awk基本用法
awk -F : '{print NF}' passwd ##-F : 以:作为分割符,统计passwd的每一行有多少列

awk -F : '{print NR}' passwd ##显示这个文件的行的序号

awk -F : 'BEGIN{print “NAME”}{print "NR"}' passwd ##awk开始执行的时候显示“NAME”,再打印行的序号

awk -F : 'BEGIN{print “NAME”}{print "NR"}END{print "end"}' passwd ##在结束时显示end

awk -F : 'BEGIN{print “NAME”}{print $1,7}END{print "end"}' passwd ##$1第一列,打印第1列和第7列

awk -F : 'BEGIN{print “NAME”}{print $0}END{print "end"}' passwd ##打印所有列
awk -F :'BEGIN{print “NAME”}{print $1="";print $0}END{print "end"}' passwd##打印第2行到第7行,$1=""相当于对第一列进行删除,注意!!!这样显示的效果不含分割符,如果需要添加分隔符,需要添加

awk -F 'BEGIN{print “NAME”}{print $1="";print $0}END{print "end"}' passwd | sed 's/ /:/g'

awk '/bash$/{print}' passwd ##打印以bash结尾的行

awk '/bash$\>/{print}' passwd ##打印以bash结尾的行,并且解除贪婪模式
awk '!/bash$/{print}' passwd ##打印除了以bash结尾的行

awk '!/bash$/&&/nologin/{print}' passwd ##打印不以bash结尾和有nologin的行

awk '!/bash$/&&!/nologin$/{print}' passwd ##打印不以bash和nologin结尾的行

awk 'BEGIN{n=0}/bash$/{n++}END{print n}' passwd ##计算一共有多少行以bash结尾

awk '/^[a-c]/{print}' passwd ##打印以a,b,c开头的行

awk -F : '$6~/bin/{print}' passwd ##打印第六列中bin的行,贪婪模式

awk -F : '$6~<\/bin/{print}' passwd ##打印第六列中bin的行,退出贪婪模式
awk -F :'$6!~<\/bin/{print}' passwd ##打印第6列不是bin的行
awk -F :'!/nologin$/{print $1}' passwd ##显示可以登录的用户的名称

awk -F :'BEGIN{n=0}/bash$/&&$6!~/^\/home/{n++}END{print n}' passwd ##统计可登录并且加目录不再/home的用户

本文介绍了Linux系统下用于文本处理的三个重要工具:grep、sed和awk。grep是一种强大的文本搜索工具,允许使用正则表达式进行模式匹配。文章详细讲解了grep中的字符匹配位置设定和次数设定。接着,探讨了sed的各种模式,如p、d、c、a、i和w模式,以及sed的其他实用技巧。最后,简要介绍了awk的基本用法。

1202

被折叠的 条评论
为什么被折叠?



