• 实战 Linux 正则表达式


    正则表达式字符

    特殊字符 ^$[].*\?+{}|() (在 sed 中使用 ?+{}|() 需要转义符 \)

    字符 功能 匹配实例 不匹配实例
    ^ 行首 echo "book is" | sed -n '/^book/p' echo "a book" | sed -n '/^book/p'
    $ 行尾 echo "a book" | sed -n '/book$/p' echo "book is" | sed -n '/book$/p'
    ^$ 行首和行尾 echo "book" | sed -n '/^b.*k$/p' echo "a book" | sed -n '/^b.*k$/p'
    删除空白行 sed '/^$/d' file
    [] 字符组 echo "book" | sed -n '/[bc]ook/p' echo "book" | sed -n '/[ac]ook/p'
    [^] 排除型字符组 echo "book" | sed -n '/[^ac]ook/p' echo "book" | sed -n '/[^ab]ook/p'
    [] 区间 echo "book" | sed -n '/[a-z]ook/p' echo "book" | sed -n '/[A-Z]ook/p'
    . 任意单个字符 echo "book" | sed -n '/b..k/p' echo "book" | sed -n '/b.k/p'
    * 0次或多次 echo "book" | sed -n '/bo*k/p' echo "book" | sed -n '/ba*k/p'
    ? 0次或1次 echo "book" | sed -n '/b\?k/p' echo "book" | sed -n '/bo\?k/p'
    + 1次或多次 echo "book" | sed -n '/bo\+k/p' echo "book" | sed -n '/booo\+k/p'
    {m} m次 echo "book" | sed -n '/bo\{2\}/p' echo "book" | sed -n '/bo\{3\}/p'
    {m,n} 至少m次,至多n次 echo "book" | sed -n '/bo\{1,2\}/p' echo "book" | sed -n '/bo\{3,4\}/p'
    | 逻辑OR echo "book" | sed -n '/book\|look/p' echo "book" | sed -n '/cook\|look/p'
    () 表达式分组 echo "book" | sed -n '/\(ok\)\+/p' echo "book" | sed -n '/\(ak\)\+/p'

    查找字符串 grep

    如果只是查找是否包含“字符串”,使用 grep 是合适的。

    • ps | grep ppp 查找 ppp 进程
    • ifconfig | grep ppp 查找 ppp 端口

    更多 grep 用法请链接快速查找 grep 常用命令

    带分隔符 awk

    如果字符串有“分隔符”--空格,冒号,逗号等,那么使用 awk 是合适的。

    实例1 提取 IP 和 MAC 地址

    • ifconfig enp2s0 | awk '/inet /{print $2}' 锚定词=inet IP 位于第 2 列
    • ifconfig enp2s0 | awk '/ether/{print $2}' 锚定词=ether MAC 位于第 2 列

    实例2 基于 MAC 地址生成 EUI

    ifconfig enp2s0 | awk '/ether/{print $2}' | awk -F: '{print $1$2$3"fffe"$4$5$6}'
    分隔符=: 在 1~6 列中间插入fffe

    更多 awk 用法请链接快速查找 awk 常用命令

    任意字符串 sed

    如果字符串没有明显的分隔符,那么使用 sed 是合适的。

    实例 提取 ping 成功率

    ping -c 1 -w 1 8.8.8.8 | sed -n 's/.*received, \([0-9]\{1,3\}\)%.*/\1/p'
    前锚定词='received, ',后锚定词='%',目标=[0-9]{1,3},因为 sed 使用'()'定义子模式,使用'\1'提取子模式
    特别留意:在 sed 中使用 ?+{}|() 需要转义符 \

    更多 sed 用法请链接快速查找 sed 常用命令

    替换字符串 sed

    如果需要从文件中替换字符串,那么使用 sed 是合适的。

    实例 修改文件中的 IP 地址

    sed -i "s/\(.*\"ipaddr\": \"\)\([0-9.]*\)\(\",\)/\1$IP\3/" ./ip.json
    子模式1=' "ipaddr": "' 正则表达式=.*"ipaddr": "
    子模式2='192.168.1.99' 正则表达式=[0-9.]*
    子模式3='",' 正则表达式=",
    因为 sed 使用'()'定义子模式,使用'\1\2\3'提取子模式 1 2 3
    特别留意:在 sed 中使用 ?+{}|() 需要转义符 \,另外调用 $IP 变量 sed 需要使用"双引号"而不是“单引号”

  • 相关阅读:
    消息中间件——RabbitMQ(六)理解Exchange交换机核心概念!
    消息中间件——RabbitMQ(五)快速入门生产者与消费者,SpringBoot整合RabbitMQ!
    消息中间件——RabbitMQ(四)命令行与管控台的基本操作!
    消息中间件——RabbitMQ(三)理解RabbitMQ核心概念和AMQP协议!
    LayUI的基本使用
    Git报错:Your branch is up to date with 'origin/master'.
    Git报错:Please tell me who you are.
    Git报错:Permission denied (publickey)
    在 windows 上安装 git 2.22
    在 windows 上安装 git 2.15
  • 原文地址:https://www.cnblogs.com/rimelink/p/16683471.html
Copyright © 2020-2023  润新知