加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – shell脚本:搜索并替换多行

发布时间:2020-12-14 05:48:12 所属栏目:百科 来源:网络整理
导读:我正在寻找一种通过 shell脚本搜索和替换多行的方法.这就是我想要做的: source:[stuff before]!--WIERD_SPECIAL_COMMENT_BEGIN-- [stuff here,possibly multiple lines.!--WIERD_SPECIAL_COMMENT_END--[stuff after] target:[stuff before][new content][st
我正在寻找一种通过 shell脚本搜索和替换多行的方法.这就是我想要做的:

source:
[stuff before]
<!--WIERD_SPECIAL_COMMENT_BEGIN-->
  [stuff here,possibly multiple lines.
<!--WIERD_SPECIAL_COMMENT_END-->
[stuff after]    

target:
[stuff before]
[new content]
[stuff after]

简而言之,我想删除它们之间的注释和所有内容,并替换为一些新内容.基本上,我想在多行上执行一个简单的sed命令,如果可能的话,只使用一些基本的* nix工具,不需要额外的脚本语言.

解决方法

如果您只需要匹配完整的行,那么您可以执行此任务
AWK.就像是:

awk -v NEWTEXT=foo 'BEGIN{n=0} /COMMENT_BEGIN/ {n=1} {if (n==0) {print $0}} /COMMENT_END/ {print NEWTEXT; n=0}' < myfile.txt

如果文件格式不正确,请注释
与您要保留或删除的文本相同的行,然后我
将使用perl,将整个文件读入单个字符串,
执行正则表达式匹配并替换该字符串,然后将新字符串写入
一个新文件.这不是那么简单,您需要编写一个perl脚本来完成工作.
就像是:

#!/usr/bin/perl
$newtext = "foonbar";
$/ = '';  # no input separator so whole file is read.
$s = <>;  # read whole file from stdin
$startPattern = quotemeta('<!--WIERD_SPECIAL_COMMENT_BEGIN-->');
$endPattern = quotemeta('<!--WIERD_SPECIAL_COMMENT_END-->');
$pattern = $startPattern . '.+' . $endPattern;
$s =~ s/$pattern/$newtext/sg;
print $s;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读