当前位置: 首页 > 面试题库 >

Shell脚本:搜索并替换多行

苏边浩
2023-03-14
问题内容

我正在寻找一种通过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 = "foo\nbar";
$/ = '';  # 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;


 类似资料:
  • 按下 / 键,编辑器底部会出现 / 符号,接着输入字符串,便可以进行搜索 / 向下搜索 ? 向上搜索 n 搜索下一个 N 搜索上一个 :s/源字符串/目标字符串 将源字符串替换为目标字符串 :s/源字符串/目标字符串/g 替换当前行中所有符合条件的字符串 :行号1,行号2s/源字符串/目标字符串/g 在指定行中进行替换 :%s/源字符串/目标字符串/g 全文替换

  • 我正在尝试使用OpenXML和埃里克·怀特的OpenXmlPowerTools(从NuGet安装)对. docx word文档进行基本的搜索和替换。我在这个网站和他的博客上遵循了一些例子,但是由于某种原因,当我运行代码后打开它时,我从来没有看到文档中出现的更改。这是我正在运行的简单函数: 消息框确实显示了它应该做的大量替换,但是当我打开文档时,我没有看到替换。此外,我认为我不需要那些文档。保存()

  • 问题内容: 在表的一个特定字段中将进行文本搜索和替换的是哪种MySQL查询? 即搜索并替换为具有值的字段的记录变为。 问题答案: 更改并匹配您的表名和相关字段: 替换(字符串函数) INSTR(字符串函数)

  • 问题内容: 诚然,对于SQL命令,我是一个菜鸟。黑客在我的一个WordPress网站上的每个帖子和页面的末尾插入了一个脚本标签,我试图在“ wp_posts”表中进行查找和替换,但是当我运行“模拟查询。这是我所拥有的: 无论我在第一组“查找”引号中添加了什么内容,即使是像“ hcifx”一样简单的东西,而不是所显示的整个脚本标签,我都会收到错误消息。有什么想法我要去哪里吗? 问题答案: 原来,该错

  • Sublime Text 提供两种主要搜索方式: 单文件搜索 多文件搜索 两种方式都支持正则表达式。 单文件搜索 搜索 键盘快捷键与搜索面板对应关系: 打开搜索面板 Ctrl + F 正则表达式 Alt + R 大小写匹配 Alt + C 精确匹配 Alt + W 下一个 Enter 上一个 Shift + Enter 所有 Alt + Enter 增量搜索 键盘快捷键与增量搜索面板对应关系: 打

  • 搜索和替换 其他常见的用途就是找到所有模式匹配的字符串并用不同的字符串来替换它们。sub() 方法提供一个替换值,可以是字符串或一个函数,和一个要被处理的字符串。 sub(replacement, string[, count = 0]) 返回的字符串是在字符串中用 RE 最左边不重复的匹配来替换。如果模式没有发现,字符将被没有改变地返回。 可选参数 count 是模式匹配后替换的最大次数;co