zoukankan      html  css  js  c++  java
  • 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'
    
  • 相关阅读:
    解决xcode5升级后,Undefined symbols for architecture arm64:问题
    第8章 Foundation Kit介绍
    app 之间发送文件 ios
    iphone怎么检测屏幕是否被点亮 (用UIApplication的Delegate)
    CRM下载对象一直处于Wait状态的原因
    错误消息Customer classification does not exist when downloading
    How to resolve error message Distribution channel is not allowed for sales
    ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX这些东东是什么鬼
    有了Debug权限就能干坏事?小心了,你的一举一动尽在系统监控中
    SAP GUI和Windows注册表
  • 原文地址:https://www.cnblogs.com/linzhenyu/p/13167828.html
Copyright © 2011-2022 走看看