• Linux 正则表达式之grep+egrep+nl+sed命令


    grep 基本正则表达式 BRE

    参数 	说明
    -b 	将二进制文件作为文本来进行匹配
    -c 	统计以模式匹配的数目
    -i 	忽略大小写
    -n 	显示匹配文本所在行的行号
    -v 	反选,输出不匹配行的内容
    -r 	递归匹配查找
    -A n 	n 为正整数,表示 after 的意思,除了列出匹配行之外,还列出后面的 n 行
    -B n 	n 为正整数,表示 before 的意思,除了列出匹配行之外,还列出前面的 n 行
    --color=auto 	将输出中的匹配项设置为自动颜色显示
    

    任意数量

    # 将匹配以'z'开头以'o'结尾的所有字符串
    echo 'zero
    zo
    zoo' | grep 'z.*o'
    
    # 将匹配以'z'开头以'o'结尾,中间包含一个任意字符的字符串
    echo 'zero
    zo
    zoo' | grep 'z.o'
    
    # 将匹配以'z'开头,以任意多个'o'结尾的字符串
    echo 'zero
    zo
    zoo' | grep 'zo*'
    

    特定字符

    # grep默认是区分大小写的,这里将匹配所有的小写字母
    echo '1234
    abcd' | grep '[a-z]'
    # 将匹配所有的数字
    echo '1234
    abcd' | grep '[0-9]'
    # 将匹配所有的数字
    echo '1234
    abcd' | grep '[[:digit:]]'
    # 将匹配所有的小写字母
    echo '1234
    abcd' | grep '[[:lower:]]'
    # 将匹配所有的大写字母
    echo '1234
    abcd' | grep '[[:upper:]]'
    # 将匹配所有的字母和数字,包括0-9,a-z,A-Z
    echo '1234
    abcd' | grep '[[:alnum:]]'
    # 将匹配所有的字母
    echo '1234
    abcd' | grep '[[:alpha:]]'
    # 标点符号
    echo '12!34
    abc.?d' | grep '[[:punct:]]'
    

    特殊符号说明:

    [:alnum:] 	代表英文大小写字母及数字,亦即 0-9, A-Z, a-z
    [:alpha:] 	代表任何英文大小写字母,亦即 A-Z, a-z
    [:blank:] 	代表空白键与 [Tab] 按键两者
    [:cntrl:] 	代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del.. 等等
    [:digit:] 	代表数字而已,亦即 0-9
    [:graph:] 	除了空白字节 (空白键与 [Tab] 按键) 外的其他所有按键
    [:lower:] 	代表小写字母,亦即 a-z
    [:print:] 	代表任何可以被列印出来的字符
    [:punct:] 	代表标点符号 (punctuation symbol),亦即:" ' ? ! ; : # $...
    [:upper:] 	代表大写字母,亦即 A-Z
    [:space:] 	任何会产生空白的字符,包括空白键, [Tab], CR 等等
    [:xdigit:] 	代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字节
    

    排除字符^

    echo 'geek
    good' | grep '[^o]'
    

    当^放到中括号内为排除字符,否则表示行首。

    echo 'geek
    good' | grep '^g'
    

    egrep 扩展正则表达式 ERE

    要通过grep使用扩展正则表达式需要加上-E参数,或使用egrep

    egrep [范本模式] [文件或目录]

    # 只匹配"zo"
    echo 'zero
    zo
    zoo' | grep -E 'zo{1}'
    # 匹配以"zo"开头的所有单词
    echo 'zero
    zo
    zoo' | grep -E 'zo{1,}
    
    # 匹配"www.aaa.com"和"www.google.com"
    echo 'www.aaa.com
    www.baidu.com
    www.google.com' | grep -E 'www.(aaa|google).com'
    # 或者匹配不包含"baidu"的内容
    echo 'www.aaa.com
    www.baidu.com
    www.google.com' | grep -Ev 'www.baidu.com'
    

    nl

    nl命令在linux系统中用来计算文件中行号,可以将输出的文件内容自动的加上行号

    sed 流编辑器

    sed工具在 man 手册里面的全名为"sed - stream editor for filtering and transforming text ",意即,用于过滤和转换文本的非交互式流编辑器。

    sed [参数]... [执行命令] [输入文件]...

    参数 	说明
    -n 	安静模式,只打印受影响的行,默认打印输入数据的全部内容
    -e 	用于在脚本中添加多个执行命令一次执行,在命令行中执行多个命令通常不需要加该参数
    -f filename 	指定执行 filename 文件中的命令
    -r 	使用扩展正则表达式,默认为标准正则表达式
    -i 	将直接修改输入文件内容,而不是打印到标准输出设备
    

    增删

    # 删除第二行
    nl /etc/passwd | sed '2d'
    
    # 删除第三到最后一行
    nl /etc/passwd | sed '3,$d'
    
    # 在第二行后(亦即是加在第三行)加上『abc』
    nl /etc/passwd | sed '2a abc'
    
    # 加在第三行前
    nl /etc/passwd | sed '3i abc'
    
    # 增加多行
    nl /etc/passwd | sed '2a abc
    def'
    

    替换

    # 将2-5行的内容替换为abc
    nl /etc/passwd | sed '2,5c abc'
    

    过滤打印

    # 将5-7行内容打印
    nl /etc/passwd | sed -n '5,7p'
    

    数据的搜索

    # 搜索有root关键字的行
    nl /etc/passwd | sed '/root/p'
    
  • 相关阅读:
    代码间距的由来和解决方法
    径向渐变
    倒计时原理
    javascript原型模式理解
    倒计时原理和折叠收缩
    highcharts注意事项
    jsp注释前台不可见
    启动Tomcat任何程序都报错
    面试题
    eclipse不自动弹出提示(alt+/快捷键失效)
  • 原文地址:https://www.cnblogs.com/linzhenyu/p/13167828.html
Copyright © 2020-2023  润新知