我有大量的降价文件。在这些文件中,我想将某些<div id="menu-full-size">
<div class="close-nav">
<svg viewbox="0 0 40 40">
<path class="close-nav-x" d="M 10,10 L 30,30 M 30,10 L 10,30" />
</svg>
</div>
<h2>Rest of menu stuff</h2>
</div>
替换为### Response
### ResponseNew
所以我尝试使用
### Response
I don't want to replace this Response above to ResponseNew since it is not following Example
## Example
### Request
123{}```
### Response
I want to replace this Response above to ResponseNew since it is following Example
替换为
## Example[^]+### Response
当我在RegExr website中进行测试时,这是有效的。
但是,使用Sublime查找和替换它会显示错误:
不匹配[或[^ in character class declaration。发生错误 在解析正则表达式片段时:&#39; #Response&gt;&gt;&gt; HERE&gt;&gt;&gt;&#39;。 在正则表达式中##示例[^] + ###响应
我还尝试在this之后的终端中使用Perl,
$&New
它显示:
无与伦比[正则表达式;标记为&lt; - HERE in m / ## Example [&lt; - HERE ^] + ###响应/在-e第1行。
如何正确编写正则表达式以便匹配?感谢
答案 0 :(得分:1)
如果文件不是太大
perl -0777 -wpe's/## Example.*?### Response\K/New/sg' markdown.txt
使用提供的输入打印正确的输出。
/s
修饰符也会使.
与换行符匹配,\K
会使之前的匹配失败,因此您不必更换&#34;替换&#34 ;他们。因此,一旦匹配,它会New
直接绑定到Response
。 -0777
开关会将整个文件粘贴到$_
,以便跨多行工作。
如果### Response
可能出现在一条线的中间,而您又不想触摸它
perl -0777 -wpe's/## Example.*?^### Response\K/New/smg' markdown.txt
其中/m
修饰符使^
匹配每行的开头,而不仅仅是整个字符串的开头。
如果文件 太大而无法进入变量,请在找到## Example
时设置一个标志,然后找到### Response
一次(标志为true)替换它并取消了国旗。
如果必须的话,这在oneliner中是可行的,但我建议使用简短的脚本。
答案 1 :(得分:1)
在逐行和slurp模式之间,您还可以定义自己的记录分隔符并选择/_ah/health
。然后,您所要做的就是为每条记录替换第一次出现的## Example
:
### Response