• sed正则表达式


    很多linux命令支持正则表达式,sed也不例外。

     
    行开始 ( ^ )

    插入符^匹配一行的开始。比如说,匹配以103打头的行:

    sed -n '/^103/p' data.txt

    注意,插入符只有在表达式的首位时,才表示行首匹配。 

    行尾( $) 

    美元符$匹配行尾。比如说,输出以g结尾的行:

     sed -n '/g$/p' data.txt

    单字符 (.)

    句点(.)匹配除行字符结尾的任何单个字符。一个点匹配一个字符,两个点匹配两个,三个点匹配三个,以此类推。

    比如,把L及随后的一个字符替换为Lee:

    sed -n 's/L./Lee/p' data.txt

     

     字符出现零或多次(*)

    星号(*)表示它之前的字符出现零或多次。比如说:’1*’表示匹配零个或多个连续的1.

     比如说,有这样一个log文件,其内容如下:

    1. log: Input Validated
    2. log:
    3. log: testing resumed
    4. log:
    5. log:output created

     假设你只关注有内容的行,那么可以这样做:

    sed -n '/log: *./ p' log.txt

    注意星号后面有一个句点,这是必要的。否则它会输出所有行。 

    字符出现一次或多次(\+) 

    元字符“\+”匹配它之前的字符,它出现一或多次。比如,在上面的log文件里,匹配有log:后跟空格的行:

    sed -n '/log: \+/ p' log.txt

    字符出现零或一次 (\?) 

    元字符(\?) 表示匹配它之前的字符,出现零或一次。

    sed -n '/log: \?/ p' log.txt

    元字符转义 (\) 

    如果需要匹配包含元字符的内容(比如说星号、句点),那么,需要对元字符进行转义。

    sed -n '/127\.0\.0\.1/ p' /etc/hosts

    字符集匹配 ([0-9])

    字符集用方括号表示,它用于匹配集合里提及的元素。比如说,匹配包含2、3或4的行:

    sed -n '/[234]/ p' data.txt

    在方括号里,可以用连接符-来表示范围。比如  [0123456789]等价于 [0-9],它还可用于字符集,比如说[a-z],[A-Z] 。

    sed -n '/[2-4]/ p' data.txt

     逻辑或(|) 

    管道符(|) 表示逻辑或,“subexpression1|subexpression2”匹配subexpression1或subexpression2。

    sed -n '/101\|102/ p' data.txt

     注意管道符是转义的。

    准确匹配m次出现({m}) 

     假设有一个numbers.txt文件,其内容如下:

    1. 1
    2. 12
    3. 123
    4. 1234
    5. 12345
    6. 123456
    • 打印包含阿拉伯数字字符的行:
    sed -n '/[0-9]/ p' numbers.txt
    •  打印五位数
    sed -n '/^[0-9]\{5\}$/ p' numbers.txt

    指定出现次数的范围({m,n}) 

    • 打印3到五位数
    sed -n '/^[0-9]\{3,5\}$/ p' numbers.txt

    范围可以只指定下限,或上限,比如{m,}或{,n}

    1. sed -n '/^[0-9]\{3,\}$/ p' numbers.txt
    2. sed -n '/^[0-9]\{,5\}$/ p' numbers.txt

    单词边界 (\b)

    元字符(\b)用于匹配单词边界。它匹配单词间的字符。

    sed -n '/Zhao\b/ p' data.txt

    反向引用(\n)

    这里(\n) 中的n是数值。反向引用可以提取表达式里的内容供后面使用。

    比如要"2022 2021 2023"按次序排列,其他就可以使用反向引用中\2 \1 \3来排序,排列的结果为"2021 2022 2023"

    echo -e "2022 2021 2023" | sed -e "s/\(.*\) \(.*\) \(.*\)/\2 \1 \3/g"

  • 相关阅读:
    适用于医美行业的微信管理系统
    STM32F103配置时钟源为内部HSI 主频为64mhz
    天命数(c++基础)
    修改 Stable Diffusion 使 api 接口增加模型参数
    C语言从头学43——预处理指令(二)
    《类车机器人的动力学轨迹优化与控制》论文解读一
    【深度学习】《动手学深度学习》环境配置
    iOS开发之自定义的framework添加第三方framework,lipo和ar命令看.o文件
    MySQL数据库:2、MySQL的下载与安装、基本使用、系统服务制作
    IDEA 快捷键大全
  • 原文地址:https://blog.csdn.net/yetyongjin/article/details/132733506