首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Perl取代match+nextline+match

Perl取代match+nextline+match
EN

Stack Overflow用户
提问于 2017-08-12 06:09:49
回答 2查看 46关注 0票数 0

我在文件中有几行:

代码语言:javascript
运行
复制
Desktop DELL firewall UP CPU 20core configured 
Desktop HP firewall DOWN CPU 18core unconfigured

我希望首先匹配UP,然后如果下一行匹配DOWN,则将这两行替换为某个字符串

我试过了

代码语言:javascript
运行
复制
perl -p -e 's?.*firewall.*UP.*\n.*firewall.*DOWN.*?STRG?' file

但它不起作用

EN

回答 2

Stack Overflow用户

发布于 2017-08-12 07:59:31

/\n.*f/不可能匹配,因为您一次只能读取一个以换行符结尾的行。

一个方便的技巧是使用-0777一次将整个文件加载到内存中。

代码语言:javascript
运行
复制
perl -0777pe's/^.*firewall.*UP.*\n.*firewall.*DOWN.*/STRG/m' file
票数 2
EN

Stack Overflow用户

发布于 2017-08-12 06:36:52

使用sed:

代码语言:javascript
运行
复制
sed '/firewall.*UP/{N;/firewall[^\n]*DOWN/s/.*/somestr/}' file

详细信息:

代码语言:javascript
运行
复制
/firewall.*UP/ {      # condition
    N;                # append the next line to the pattern space
    /firewall[^\n]*DOWN/  # condition
        s/.*/somestr/ # then: replace all with somestr
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45644444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档