最近在shell对文本进行操作,遇到了使用sed进行最小匹配的问题。sed默认匹配规则是贪婪匹配。

举例来说,如果文本内容为:

(aa)bb(cc)

使用sed匹配:

'/(.*)/'

匹配结果为:

(aa)bb(cc)

上述结果即贪婪匹配。

最小匹配的结果是获取规则字符串之间的最小内容,即为:

(aa) (cc)

这两个结果。

sed获取最小匹配的方法:

1.通过 [^str] 的方法找到最近的右侧匹配规则

2.使用perl代替sed。

举例:删除下列字符串中的括号和括号中的内容

(a)bb(ccc)dddd(eeeee)f

使用sed的默认方法(贪婪匹配):

#echo "(a)bb(ccc)dddd(eeeee)f" | sed 's/(.*)//g'
#f

使用第一种方法:

#echo '(a)bb(ccc)dddd(eeeee)f' | sed 's/([^)]*)//g'
#bbddddf

使用第二种方法:

#echo "(a)bb(ccc)dddd(eeeee)f" | perl -pe 's/\(.*?\)//g'
#bbddddf

另外发现,sed支持的匹配规则与perl不同,关于字符是否需要转义也是不一样的。例如,举例中的 "(" 和 ")" 在sed中不需要转义,在perl中则需要转义。

sed替换字符串的贪婪匹配和最小匹配相关推荐

  1. python正则匹配找到所有的浮点数_Python随笔17:Python正则表达式基础(4):贪婪匹配和最小匹配...

    Python正则表达式 贪婪匹配/最小匹配 Re库默认采用贪婪匹配,即匹配最长的子字符串.在量词后面加一个"?",即可由贪婪匹配化为最小匹配. '*'用于将前面的模式匹配0次或多次 ...

  2. Python RE库的贪婪匹配和最小匹配

    >>> import re >>> match = re.search(r'PY.*N', 'PYANBNCNDN') >>> match.gro ...

  3. linux shell 替换字符串的几种方法,变量替换${},sed,awk

    变量a是一个带空格的字符串,现在用"hdpusr400"替换变量a中的"hduser302": [liusiyi@localhost ~]$ echo $a - ...

  4. shell 替换字符串的几种方法,变量替换${},sed,awk

    变量a是一个带空格的字符串,现在用"hdpusr400"替换变量a中的"hduser302": 1 [liusiyi@localhost ~]$ echo $a ...

  5. Linux中的sed命令,使用方法之一「替换字符串中的内容 」,以及「s/ / / 」和「s/ / /g」之间的区别

    ■前言 按照如下写法,可以实现替换字符串的功能 ■具体操作 sed 's/hello/hi/' 321.html 替换对象 hello 替换后,显示的内容 hi 只是在输出的时候,被替换,不会改变原有 ...

  6. 转义sed替换模式的字符串

    本文翻译自:Escape a string for a sed replace pattern In my bash script I have an external (received from ...

  7. vim替换字符串带斜杠_Vim:正则表达式匹配一个字符串

    到目前为止,所有给出的答案对我来说都是错误的,因为它们执行的是贪婪匹配.在多次出现"否"的行中,它们将匹配最后一个: YES YES YES YES no YES YES no Y ...

  8. linux替换变量字符串,linux shell 替换字符串的几种方法,变量替换${},sed,awk

    变量a是一个带空格的字符串,现在用"hdpusr400"替换变量a中的"hduser302": [liusiyi@localhost ~]$ echo $a - ...

  9. Sed 删除匹配行,匹配的字符用Shell变量替换,且变量里含有斜杠“/”时,无法删除 解决办法

    原文链接: https://zhidao.baidu.com/question/2138070399877009148.html 修改语法,用#代替",这个只能用在sed的s替换命令中,如: ...

  10. linux sed 替换中文,Linux中使用sed命令替换字符串小结

    最近写了几个小脚本用到了sed命令,学了一下,顺便记下 sed替换的基本语法为: 复制代码 代码如下: sed 's/原字符串/替换字符串/' 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字 ...

最新文章

  1. 网友脑洞大开 用 Emoji 开发“俏皮”编程语言
  2. Varnish3.0中文入门教程-应用篇2
  3. idea不区分大小写设置_我的 IntelliJ IDEA 一直都是这么设置的,效果很棒!
  4. 使用 MDT2008 轻量部署进行 Windows XP SP2 简单部署
  5. JavaScript 本地验证用户注册信息
  6. SAP Fiori Launchpad Contact Support的按钮启用逻辑
  7. 线性表之顺序表与单链表的区别及优缺点
  8. RDL(C) Report Design Step by Step 1: DrillThrough Report
  9. js面向对象的程序设计 --- 下篇 继承启蒙
  10. 怎样使用Javascript操作XMLDOM才能兼容IE、FireFox浏览器呢?
  11. android 自定义加载圈,Android自定义加载控件实现数据加载动画
  12. win7计算机里没有网络图标,Win7网络图标不见了?找回网络图标的方法
  13. win10 开始屏幕 磁铁程序图标不显示 解决
  14. 计算机考试excel基础试题,计算机基础(Excel2010)试题及答案解析
  15. 基于SSH的医药管理系统
  16. oracle多次发运,EBS 发运管理操作实例11——延迟交货(Backorder)
  17. HTTP和RPC的区别
  18. 超声延时聚焦原理及算法仿真
  19. 基金从业考试如何备考?
  20. 关于在Linux下无法查看caj文档的解决方案

热门文章

  1. sql 去重 distinct
  2. BSG白山极客挑战赛 B君的圆锥
  3. ubuntu PHP Cannot adopt OID in UCD-SNMP-MIB
  4. web项目406错误的解决
  5. 一个人是否靠谱,闭环很重要
  6. 成都IB学校取得了哪些成绩?
  7. wps文件没有保存怎么恢复,学这一招就够了!
  8. 【craps赌博游戏】
  9. web前端面试题-1
  10. 将计算机放置桌面右上角,如何给电脑桌面上添加我的电脑快捷方式