sed中的正则匹配

作者: 生信编程日常 | 来源:发表于2020-06-28 20:59 被阅读0次

sed很早就支持正则表达式了,这在文件处理中非常有用,以下列出一些常见用法(GNU SED版本)。

1. 行首/行尾

行首用^表示,行尾用$表示。例如有如下test.txt文件:


如果我们想把其中第一列的Potri.去掉,那么可以:

sed 's/^Potri.//g' test.txt 

假如想在最后数字的后面加一列"yes":

sed 's/$/\tyes/g' test.txt
2. 匹配字符

(来自https://wiki.jikexueyuan.com/project/unix/regular-expressions.html)

比较常用的有:

字符 含义
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线
\s 任意的空白符(包括空格制表符换页符)
[0-9] 任意0到9中数字
[a-zA-Z] 26个英文字母中的一个,不区分大小写
3. 匹配在列表中的任意字符

用[]代表这样的列表,比如:

echo -e "Cat\nBat\nHat" | sed -n '/[CH]at/ p'

结果输出:
Cat
Hat
[]代表从其中选择一个。

4. 不在列表中的任意字符
echo -e "Cat\nBat\nHat" | sed -n '/[^CH]at/ p'

仅输出Bat。

5. 匹配出现某种次数(+; * ; ?; {n}; {n,}; {m,n})

出现不止一次(>= 1): \+
出现0或1次:\?
出现n次:{n}
出现>=n次:{n,}
出现m到n次:{m, n}

注意前后括号{}都需要转义。

6. 或者

或者 | 常与 () 一起使用,注意两者都需要反斜杠\转义。

echo -e "Cat\nBat\nHat" | gsed -n '/\(C\|B\|H\)at/p'
7. 特殊字符转义

一些特殊字符比如换行符\n或者回车\r等,匹配的时候在前面再加一个反斜杠转义,如\\r。

8. 例子

匹配上海市电话号码:

# eg. 021-52060888
echo 021-52060888 | sed -n '/^012-[0-9]\{8\}/p'

匹配ip地址:

echo '127.255.255.254' | sed -n '/[0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+/p'

值得注意的是,在sed中不支持\d匹配数字,此处须用[0-9]。

欢迎关注!


相关文章

  • sed中的正则匹配

    sed很早就支持正则表达式了,这在文件处理中非常有用,以下列出一些常见用法(GNU SED版本)。 1. 行首/行...

  • 从零开始学习Linux(四十):Shell编程之正则表达式

    1、正则表达式与通配符 正则表达式:用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命...

  • 正则表达式与通配符

    1. 正则表达式与通配符 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命...

  • 7月23日 正则符号

    系统通配符号 * 匹配所有内容 {} 匹配序列信息 系统正则符号 主要在grep sed awk 命令用基础正则b...

  • sed 命令学习

    参考极客学院:正则表达式和 SED参考菜鸟教程:Linux sed命令参考酷壳:SED 简明教程 sed匹配没有问...

  • sed

    正则表达式 – 如何使sed删除行不匹配替换

  • sed 简单使用

    sed sed命令以行为单位对文本文件进行处理,可以直接指定行号,如1,也可以通过正则匹配对匹配成功的行进行处理 ...

  • Shell中正则表达式、sed和awk常见问题

    1 正则表达式中的+、?、*分别表示什么含义? 2 如何编写正则表达式匹配11位的手机号? 3 简述sed定址符的...

  • Sed(1)

    与Vim的正则表达式有些不同,下面介绍sed的正则表达式: 1)^匹配一行的开始 2) $匹配一行的结束 3) ....

  • sed命令详解

    简介: sed 基本上就是在玩正则模式匹配。sed会一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,...

网友评论

    本文标题:sed中的正则匹配

    本文链接:https://www.haomeiwen.com/subject/ucxgfktx.html