美文网首页
正则表达式及相关工具-Linux

正则表达式及相关工具-Linux

作者: TomnJerry | 来源:发表于2018-05-24 14:32 被阅读0次
    1. 正则表达式
    • ():匹配小括号内的字符串,可以是一个,也可以是多个,常跟“|”(或)符号搭配使用,是多选结构
    • []:匹配字符组内的字符,比如咱们常用的[0-9a-zA-Z.*?!]等,在[]内的字符都是字符
    • {}:匹配次数,匹配在它之前表达式匹配出来的元素出现的次数
    • ^ 行首 $ 行尾 ^$空行
    • . 任意字符(除换行)
    • * 0-n个 + 1-n个 ? 1个
    • [^]表示除了[]内的内容 ^[]表示要以[]内容开头
    • [0-9] 0-9任意一个字符 [a-z] a-z任意一个字符 [A-Z] A-Z任意一个字符 [a-Z]等价于[a-zA-Z] 所有字母中的任意一个
    • < 单词头 > 单词尾 (以空格分隔单词)
    1. 转义支持
    • grep,sed,awk均是针对文本的行来操作
    • awk 直接支持转义,但不支持{}转义,加 --posix后支持{}转义
    • sed 加-r支持转义
    • grep 加-E支持转义
    • 练习
      grep -i -E 'ro{1,2}' passwd 等价于 grep -i 'ro{1,2}' passwd
      sed -n -r '/roo?/'p passwd 等价于 sed -n '/root?/'p passwd
      awk '/ro{2,}/{print}' passwd 无结果 awk --posix '/ro{2,}/{print}' passwd 才能匹配到结果
    1. grep
    • 参数
      -n :显示行号
      -o :只显示匹配的内容
      -q :静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容
      -l :如果匹配成功,则只将文件名打印出来,失败则不打印,通常-rl一起用,grep -rl 'root' /etc
      -A :如果匹配成功,则将匹配行及其后n行一起打印出来
      -B :如果匹配成功,则将匹配行及其前n行一起打印出来
      -C :如果匹配成功,则将匹配行及其前后n行一起打印出来
      --color :关键字加上颜色显示
      -c :如果匹配成功,则将匹配到的行数打印出来
      -E :等于egrep,扩展
      -i :忽略大小写
      -v :取反,不匹配
      -w:匹配单词
    • 练习
      显示出所有含有root的行:grep 'root' passwd
      输出任何包含bash的所有行,还要输出紧接着这行的上下各两行的内容:grep -C 2 'bash' passwd
      显示出有多少行含有nologin:grep -c 'nologin' passwd
      显示出哪些行含有root,并将行号一块输出:grep -n 'root' passwd
      查找nfsnobody和ntp用户:grep -E 'n(fsnobody|tp)' passwd
      过滤出单词组成是字母+数字+字母的行:grep -E '^[a-Z]+[0-9]+[a-Z]+' passwd
      过滤掉所有注释和空行:sudo grep -v '^#' /etc/ssh/sshd_config | grep -v '^$'
    1. sed
    • 常用参数
      -n p 只打印结果
      -e 实现多行sed指令
      d 删除某行或多行或匹配的某个字符串
      s 替换,替换为空则为删除操作
      g 全局 不加g只处理每行的第一个
      / 可用于分隔符,如果要替换路径等,可将/改为#或@
      -i 可用来直接修改文件内容
    • 练习
      用sed打印所有行:sed -n '1,$'p test.txt
      打印test.txt的3到10行:sed -n '3,10p' test.txt
      打印test.txt 中包含 ‘root’ 的行:sed -n 'root'p test.txt
      删除test.txt 的15行以及以后所有行:sed '15,$'d test.txt
      删除test.txt中包含 ‘root’ 的行:sed '/root/'d test.txt
      替换test.txt 中 ‘root’ 为 ‘toor’:sed 's/root/toor/g' test.txt
      替换test.txt中 ‘sbin/nologin’ 为 ‘bin/login’:sed 's#sbin/nologin#bin/login#g' test.txt
      删除test.txt中5到10行中所有的数字:sed '5,10s/[0-9]//g' test.txt
      删除test.txt 中所有特殊字符(除了数字以及大小写字母):sed 's/[^0-9a-Z]//g' test.txt
      在test.txt 20行到末行最前面加 ‘aaa:’:sed '20,$s/^./aaa:&' test.txt
      把test.txt 中第一个数字移动到行末尾root:x:0:0:root:/root:/bin/bash:sed -r 's#([0-9][0-9]
      )([0-9][0-9])([^0-9].$)#\1\3\2#'

    相关文章

      网友评论

          本文标题:正则表达式及相关工具-Linux

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