美文网首页
Shell入门07 -- 正则表达式,grep,sed,awk命

Shell入门07 -- 正则表达式,grep,sed,awk命

作者: YanZi_33 | 来源:发表于2021-10-11 17:59 被阅读0次

Shell正则

  • 正则表达式是为处理大量的字符串而定义的一套规则和方法,通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串;
  • 最常 应用正则表达式 的命令有grepsedawk
基础的正则表达式
  • ^word:匹配以word开头的内容;
  • word$:匹配以word结尾的内容;
  • ^$:表示空行;
  • . :表示且只能代表任意一个字符;
  • \:转义字符即让字符原有的含义失效;
  • *
  • .*:匹配所有字符;
  • [abc]:匹配含有abc的任意字符;
  • [^abc]:匹配不含邮abc的任意字符;
  • [a-z]:匹配包含小写字母;
  • [A-Z]:匹配包含大写字母;
  • [a-Z]:匹配包含所有字母;
  • (www|888):匹配包含字符串www或888的字符;
  • (a+):匹配字符a出现一次或多次的字符;
  • ab(c|d):匹配包含字符串abc或abd的字符;
  • [[:digit:]]:匹配包含数字的字符;
  • [[:lower:]]:匹配包含小写字母的字符;
  • [[:upper:]]:匹配包含大写字母的字符;
  • [[:alpha:]]:匹配包含所有字
    母的字符;

grep

  • 下面创建一个文本文件test.txt,使用grep命令来测试上面的正则表达式,文本内容如下:
I am liyanyan teacher!!
I teach Linux.
test

I like basketball sdasdasdfgd!
my jianshu is sdasdsfds.com
our site is fdsfgdsfd.com
my qq is 114335fdsfsda.
note 34710233454.
grep参数选项
  • grep -o:只打印出匹配到的字符;
  • grep -E:支持扩展元字符,即转义字符;
  • grep --color=auto 'root' /etc/passwd: --color=auto匹配的目标文本有颜色显示;
  • 利用别名alias可以将grep --color=auto配置到系统的配置文件/etc/bashrc中去,这样就不用每次都输入了,找到/etc/bashrc文件然后利用sublime打开,在最后输入alias grep='grep --color=auto',保存需要输入密码,获取修改此系统文件的权限,如下所示:
    image.png
  • 终端再来执行grep 'root' /etc/passwd,结果如下:
    image.png
  • grep -n 'root' /etc/passwd:打印行 包含root,有行号,默认区分大小写,-n表示打印行号;
  • grep -n -i 'root' /etc/passwd:打印行 包含root,有行号,不区分大小写,-i表示不区分大小写;
  • grep -n -i '^root' passwd: 打印行 包含root,有行号,以root开头;
  • grep -n -i -v '^root' passwd:打印行 包含root,有行号,不区分大小写,不以root开头,-v表示取反;
  • grep -n -B 3 '^_svn' /etc/passwd:打印行 有行号,以_svn开头的前面3行,-B 3表示目标行的前面三行;
    image.png
  • grep -n -A 3 '^_svn' /etc/passwd:打印行 有行号,以_svn开头的后面3行,-A 3表示目标行的后面三行;
    image.png
  • grep -n -C 3 '^_svn' /etc/passwd:打印行 有行号,以_svn开头的前面三行与后面3行,-C 3表示目标行的前面3行与后面3行;
    image.png
  • grep -w 'macOS' /etc/passwd:打印行 包含macOS字符,-w表示按照指定字符搜索;
grep+正则表达式
  • grep "^m" test.txt:过滤以m开头的行,会将过滤行打印出来,如下所示:
    image.png
  • grep "m$" test.txt:过滤以m结尾的行,会将过滤行打印出来,如下所示:
    image.png
  • grep -vn "^$" test.txt:将空行排除掉,然后打印出其他内容,且打印出行号,如下所示:
    image.png
  • grep "." test.txt:匹配任意字符,不包括空行,如下所示:
    image.png
  • grep ".*" test.txt:匹配任意字符,包括空行,如下所示:
    image.png
  • grep "\.$" test.txt:匹配以点结尾的所有行,如下所示:
    image.png
  • grep "[abc]" test.txt:匹配包含abc的所有行,如下所示:
    image.png
  • grep "[0-9]" test.txt:匹配包含0-9的所有行,如下所示:
    image.png
  • grep "[a-z]" test.txt:匹配包含所有小写字母;
  • grep "[A-Z]" test.txt:匹配包含所有大写字母;
  • grep "[^a-z]" test.txt:匹配去除小写字母的其他所有字符;
  • grep "^[a-z]" test.txt:匹配以小写字母开头的内容;
  • grep "3\{2\}" test.txt:匹配字符3 重复出现2次;
  • grep -E "3{2}" test.txt:匹配字符3 重复出现2次,有参数E,无需转义字符;
  • grep -E "3{1,3}" test.txt:匹配字符3 重复出现1-3次;
  • grep -E "3{1,}" test.txt:匹配字符3,重复出现1次或1次以上;
  • grep -E "(com)" test.txt:匹配字符串com的字符,如下:
    image.png
  • grep -E "(a+)" test.txt:匹配字符a,出现一次或者多次的字符,如下所示:
    image.png
  • grep "[[:digit:]]" test.txt:匹配包含数字的字符,如下:
    image.png

sed

  • sed是一个流编辑器,非交互的编辑器,它一次处理一行内容;处理时将当前处理的行存储在临时缓冲区中,也称为模式空间,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区中的内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾,文件内容并没有改变,除非你使用重定向存储输出;
  • sed主要用来自动编辑一个或者多个文件,简化对文件的反复操作,编写转换程序等;
sed命令
  • sed [options] 'command' file
  • sed与grep不一样,不管是否找到指定的模式,退出状态都是0,只有当命令存在语法错误时,sed的退出状态才是非0;
  • a:在当前行添加一行或多行;
  • c:用新文本修改(替换)当前行中的文本;
  • d:删除行;
  • i:在当前行之前插入文本;
  • l:列出非打印字符;
  • p:打印匹配到的内容;
  • n:读入下一输入行,并从下一条命令而不是第一条命令开始对其处理;
  • !:对所选行以外的所有行应用命令;
sed参数选项
  • sed -n:取消默认的输出;
  • sed -i:直接修改对应的文件;
  • sed -r:支持扩展元字符,即转义字符;
应用
  • sed -n 'halt/p' test.txt:打印匹配halt的行;
  • sed -n '2p' test.txt:打印第二行;
  • sed -n '$p' test.txt:打印最后一行;

awk

  • awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母;
  • awk适合文本处理和报表生成,其语法较为常见,借鉴了某些语言的一些精华,如 C 语言等。在 linux 系统日常处理工作中,发挥很重要的作用,掌握了 awk将会使你的工作变的高大上;
  • 通常,awk是以文件的每一行 为处理单位的;awk每接收文件的一行,然后执行相应的命令,来处理文本;
awk参数
  • awk -F":" '{ print $1 }' hello.txt:-F参数用来指定分隔符 :
awk命令
  • awk -F":" '{ print $1 }' hello.txt:其中print为打印命令,读取hello.txt文件中的内容,遍历每一行以分隔符:隔开,然后打印每一行的第一个分隔字符串;
awk的内置命令
  • NF:每一行经过分隔符切割之后获取的 字段的个数;
  • NR:文件的行数;

相关文章

网友评论

      本文标题:Shell入门07 -- 正则表达式,grep,sed,awk命

      本文链接:https://www.haomeiwen.com/subject/spsloltx.html