linux 正则表达式,sed使用

qidu 2020-04-26

区别于正则,通配符一般用户命令行bash环境
  • “ * ” 代表任意一个或者多个字符(一般代表所有字符)

linux 正则表达式,sed使用

  • “?” 代表任意一个字符(注意按问好的个数匹配多少个字符)
    linux 正则表达式,sed使用
  • “;” 两个命令之间的分隔符

linux 正则表达式,sed使用

  • “#” 配置问渐渐注释
  • “|” 管道
  • “~” 用户家目录
  • “-” 上一次目录
  • “$” 变量符
  • “/” 路径分隔符号,也是根的意思
  • “>” 或者 1> 重定向,覆盖原有数据内容
  • ">>" 追加重定向,追加内容文件尾部。
  • “<” 输入重定向
  • “<<” 追加重定向
  • ‘ ’ 单引号,不具有变量置换功能,输出时所见即所得。
    linux 正则表达式,sed使用
  • " " 双引号,具有变量直换功能,解析变量后输入 结果,不加引号相当于双引号。
  • ` tab 上面的引号,两个 `中间为命令,会先执行,等价$()。
  • “{}” 中间为命令区块组合或被哦人能够序列
  • “!” 逻辑运算种的“非”(not)
  • “&&” and当前一个指令执行成功时,执行后一个指令
  • “||” or当前一个指令执行失败时,执行后一个指令
  • .. 上一个目录
  • . 当前目录
    正则表达式
    linux 正则表达式一般以行为单位处理的。正则表达式和我们常用的通配符特殊字符是有本质的区别。
    1,基础正则第一波字符说明
    1)“^”,^word 匹配以word开头的内容。 vi/vim 编辑器里 ^ 代表一行的开头
    2)"$" ,word$匹配以word结尾的内容。vi/vim 编辑器里¥代表一行的结尾
    3)“^$” 表示空行
    示例:(注意红色的是匹配的字符,匹配一个字符但是grep打印一行出来)
    linux 正则表达式,sed使用
    grep -n 打印出匹配的行,grep -v 排除匹配, -o 只输出匹配到的内容 不按行输出了
    linux 正则表达式,sed使用
    2,基础正则第二波字符说明:
    4)"." 代表且只代表任意一个字符。
    5) "\" 转移符号,. 就只代表点本身,让着有特殊身份意义的字符脱掉马甲,还原原型。
    6)“*”重复 0个或多个前面的一个字符,例如*o 匹配没有o,有1个o或者多个oooo.
    7) ".
    " 匹配所有字符。 延申.以任意多个字符开头。.$以任意多个字符结尾。
    示例:
    匹配任意字符(注意其中没有空行)
    linux 正则表达式,sed使用
    匹配任意所有字符.
    linux 正则表达式,sed使用
    匹配包含oldb.y 的中间的任意字符
    linux 正则表达式,sed使用
    匹配任意一个字符结尾
    linux 正则表达式,sed使用
    匹配以.结尾的字符
    linux 正则表达式,sed使用
    匹配o
    0个或者多个ooo 注意空行也匹配了 其实就是所有 但是意义不同
    linux 正则表达式,sed使用
    3,基础正则第三波字符说明
    8)[abc] 匹配字符集合内的任意一个字符[a-zA-Z],[0-9]
    9)[^abc] 匹配不包含^后的任意一个字符的内容 或a 或b 或c(注意中括号里^为取反,注意与中括号外面的区别 外面是^ 以什么开头)
    10)a{n,m} 重复n到m次,前一个重复的字符。如果用egrep/sed -r 可以去掉斜线 或者-E ERE 模式
    a{n,} 重复至少n次,前一个重复的字符。
    a{n} 重复n次,前一个重复的字符。
    a{,m} 最多m次
    示例重复3次
    linux 正则表达式,sed使用
    重复至少3次
    linux 正则表达式,sed使用
    重复最多3次(注意0次也包含在内)
    linux 正则表达式,sed使用
    grep 一般常用参数:
    -i 忽略大小写的不同,所以大小写视为相同
    -n 匹配的内容在其行首显示行号
    -v 反向选择,即显示没有‘搜索字符串的那一行’内容的那一行
    -E 扩展的grep,即egrep
    扩张正则表达式
    使用的命令:grep -E 以及egrep
    了解即可
    1)+ 表示重复“一个或者一个以上”前面的字符(是0或者多个)
    2)?表示重复“0个或一个”前面的字符
    3)| 表示同时过滤多个字符串
    4)()分组过滤,后向引用。
    示例:重复0 一个或者多个(
    可以包含0个) +
    linux 正则表达式,sed使用
    重复0个或者1个前面一个字符 ?(. 是有且只有一个)
    linux 正则表达式,sed使用
    过滤多个筛选条件 |
    linux 正则表达式,sed使用
    linux 正则表达式,sed使用
    元字符
    LINUX企业级正则实战:
    1,取系统IP
    第一种方法:()不用正则
    ifconfig eth0 | sed -n ‘2p‘ | sed ‘s#^.*inet##g‘ |sed ‘s#n.*##g‘ | sed ‘s#^ ##‘
    ##sed -n ‘2p‘ 打印出第二行  sed ‘s#^.*inet##g‘  匹配替换到 inet  sed ‘s#n.*##g‘  匹配 取消netmask 以后的数据 sed ‘s#^ ##‘ 去除空格 注意 ^.*inet  ^.* 表示任意字符开头 匹配到 inet为止

    linux 正则表达式,sed使用
    第二种方法
    sed -nr ‘s#支持正则的位置##gp‘ file(s前的2为行号)
    sed - n ‘s#()()#\1\2#gp‘ file 当前面匹配的部分用小括号的时候,第一个括号内容,可以在后面部分1\输出。同理 \2 也一样
    示例

    I an oldboy teacher !
    sed -nr ‘1s#^.*n (.*) t.*$#\1#gp‘ ./oldboy.log
    ##-r 开启正则 1s 第一行 ^.*n 以任意字符开头到n空格结尾(.*) 表示里面匹配的内容oldboy teacher 过滤以空格t.* 任意字符结尾 \1 引用(.*)的配置匹配内容输出

    取IP
    linux 正则表达式,sed使用

    ifconfig eth0 | sed -n -r ‘2s#^.*et (.*) n.*$#\1#gp‘

    示例取644
    linux 正则表达式,sed使用

    stat /etc/hosts | sed -nr ‘4s#^.*\(0(.*)/-.*$#\1#gp‘

相关推荐