sed 匹配最短模式的方法_sed 跨行 最短 匹配-程序员宅基地

技术标签: sed  shell脚本  shell  最短模式  

目前为止,我们只执行了简单的字符串替换。虽然这很方便,但是我们还可以匹配规则表达式。例如,以下 sed 命令将匹配从 '<' 开始、到 '>' 结束、并且在其中包含任意数量字符的短语。下例将删除该短语(用空字符串替换):
  $ sed -e 's/<.*>//g' myfile.html 
  这是要从文件除去 HTML 标记的第一个很好的 sed 脚本尝试,但是由于规则表达式的特有规则,它不会很好地工作。原因何在? 当 sed 试图在行中匹配规则表达式时,它要在行中查找最长的匹配。 在我的前一篇 sed 文章中,这不成问题,因为我们使用的是 'd' 和 'p' 命令,这些命令总要删除或打印整行。但是,在使用 's///' 命令时,确实有很大不同,因为规则表达式匹配的整个部分将被目标字符串替换,或者,在本例中,被删除。这意味着,上例将把下行:
  <b>This</b> is what <b>I</b> meant. 
  变成: 
  meant. 
  我们要的不是这个,而是: 
  This is what I meant. 

  幸运的是,有一种简便方法来纠正该问题。我们不输入“'<' 字符后面跟有一些字符并以 '>' 字符结束”的规则表达式,而只需输入一个“'<' 字符后面跟有任意数量非 '>' 字符并以 '>' 字符结束”的规则表达式。这将与最短、而不是最长的可能性匹配。

新命令如下:

  $ sed -e 's/<[^>]*>//g' myfile.html 
  在上例中,'[^>]' 指定“非 '>'”字符,其后的 '*' 完成该表达式以表示“零或多个非 '>' 字符”。对几个 html 文件测试该命令,将它们管道输出到 "more",然后仔细查看其结果。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/haoyuedangkong_fei/article/details/53762463

智能推荐

nvidia-361 : 依赖: lib32gcc1 但是它将不会被安装-程序员宅基地

文章浏览阅读4.4k次。安装GPU驱动时sudo apt install nvidia-361,出现问题:下列软件包有未满足的依赖关系:nvidia-361 : 依赖: lib32gcc1 但是它将不会被安装 依赖: libc6-i386 但是它将不会被安装E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。缺什么就安装什么sudo apt-g...

20个堪称神器的命令行软件-程序员宅基地

文章浏览阅读258次。点击上方"IT牧场",选择"设为星标"技术干货每日送达!1.ag:比grep、ack更快的递归搜索文件内容。2.tig:字符模式下交互查看git项目,可以..._命令行神奇

基于Webrtc和Janus的多人视频会议系统开发6 - 从Janus服务器订阅媒体流_springboot webrtc janus 视频会议-程序员宅基地

文章浏览阅读3.2k次。由于前段时间一直忙于开发,没有及时记录开发过程中遇到的问题,现在只能靠回忆来写一些印象深刻的坑了,本篇文章先把本系列的最后一篇补上,前面只是做到了把流推上去,现在还需要把流订阅下来。记得当时是遇到几个问题的,其中一个是订阅其他流后,自己发布的视频就没有声音了,其他问题已经记不清楚了,大家如果遇到什么问题说下说不定能帮助想起了。感接时有点疑惑,推流时已经建立了peerconnection,收..._springboot webrtc janus 视频会议

AngularJs应用页面切换优化方案_angularjs路由跳转太慢-程序员宅基地

文章浏览阅读666次。前言AngularJs被用来开发单页面应用程序(SPA),利用AJAX调用配合页面的局部刷新,可以减少页面跳转,从而获得更好的用户体验。Angular的ngView及其对应的强大路由机制,是实现SPA应用的核心模块。本文所说的页面切换指的就是这个路由机制,即根据不同的url展示不同的视图。有一种非常常见的场景:在切换至新页面后,需要通过AJAX调用从服务器请求一些数据,然后根据这些_angularjs路由跳转太慢

transformer模型_transformer分类模型-程序员宅基地

文章浏览阅读7.1k次,点赞3次,收藏22次。转自:https://www.bilibili.com/video/BV1Mt411J734https://github.com/aespresso/a_journey_into_math_of_ml说到自然语言处理, 语言模型, 命名实体识别, 机器翻译, 可能很多人想到的LSTM等循环神经网络, 但目前其实LSTM起码在自然语言处理领域已经过时了, 在Stanford阅读理解数据集(SQuAD2.0)榜单里, 机器的成绩已经超人类表现, 这很大程度要归功于transformer的BERT预训练模._transformer分类模型

redhat下的交叉编译安装-程序员宅基地

文章浏览阅读108次。1. 下载arm-linux-gcc-3.4.1.tar.bz2到系统的顶层目录下2. 解压 arm-linux-gcc-3.4.1.tar.bz2  #tar -jxvf arm-linux-gcc-3.4.1.tar.bz2  解压过程需要一段时间,解压后的文件形成了 usr/local/ 文件夹,进入该文件夹,将   arm文件夹拷贝到/usr/local/下  # cd usr/loca..._redhat 交叉编译安装

随便推点

Docker镜像加速_国内可用的docker镜像加速-程序员宅基地

文章浏览阅读463次,点赞8次,收藏6次。确保安装好docker,_国内可用的docker镜像加速

Matlab:具有状态依赖时滞的延迟微分方程(DDE)_状态随着时滞变化的matlab代码-程序员宅基地

文章浏览阅读293次。在Matlab中,我们可以使用一些技巧来求解具有状态依赖时滞的DDE。ddeFunc是DDE的右侧函数,它定义了DDE的形式。在这个例子中,我们假设DDE的形式为dy(t)/dt = y(t) - y(t-τ)^2。为了使用Matlab求解这个DDE,我们需要将其转化为一个常微分方程(ODE)的问题。使用上述代码,我们可以求解具有状态依赖时滞的DDE,并得到数值解。其中,y(t)是未知函数,τ是一个给定的时滞,f是一个已知的函数。我们的目标是找到y(t)的解。最后,我们提取解的时间和数值,并绘制解的图像。_状态随着时滞变化的matlab代码

pytorch中的池化函数_pytorh global pooling-程序员宅基地

文章浏览阅读2.5k次,点赞3次,收藏13次。PyTorch 提供了多种池化函数,用于对输入数据进行不同类型的池化操作。这些池化函数允许你对不同维度的输入数据进行平均池化或最大池化,并且有自适应版本,可以自动调整输入大小以满足指定的输出大小。选择适当的池化函数取决于你的应用和输入数据的维度。_pytorh global pooling

求助:VB.net 父子窗体父窗体的按钮显示子窗体上_vb.net 父窗口和子窗口-程序员宅基地

文章浏览阅读51次。创建父子窗体时Button1按钮启动了form4 ,form4启动时button1按钮还是在form4窗体的上面。该怎么处理各位老师请指教?_vb.net 父窗口和子窗口

java.lang.module.FindException: Module not found-程序员宅基地

文章浏览阅读3.6k次。2 用工具自动创建 module-info.java,自己建会出错,项目目录上右键 configure -> create module-info.java。出现这个原因一般是module-info.java 的问题。1 删除 module-info.java。找了很多没什么好的解决方案。_java.lang.module.findexception

linux锁定用户的作用,【Linux】用户的锁定和解锁-passwd的特殊用法-程序员宅基地

文章浏览阅读1k次。文章目录前言前面我们已经介绍过了passwd的使用,今天我们再来看一些特殊的用法查看帮助[root@zmedu-17~]#passwd--help用法:passwd[选项...]-k,--keep-tokens保持身份验证令牌不过期-d,--delete删除已命名帐号的密码(只有根用户才能进行此操作)-l,--lock..._linux passwd --lock

推荐文章

热门文章

相关标签