我试图替换多行中的两个匹配模式,仅替换匹配的start
和end
行,并将行保持在start
和end
之间。
我试图使用sed,awk,Python,Perl从此处组合一些答案,但是没有运气。
这就是我所拥有的:
other text
```term
command1
```
other text
```term
command1
command2
```
other text
```js
code
```
替换的文本应如下所示:
other text
{{< terminal >}}
command1
{{< /terminal >}}
other text
{{< terminal >}}
command1
command2
{{< /terminal >}}
other text
```js
code
```
基本上,我想用term with `{{< terminal >}}` and
替换包含{{< /terminal >}}
的每条匹配行。
我无法简单地搜索并替换包含start
和end
模式的行,因为end
可以匹配我要保留的其他start
行。
答案 0 :(得分:3)
请您尝试以下。
.icon{
filter: invert(48%) sepia(79%) saturate(2476%) hue-rotate(86deg) brightness(118%) contrast(119%);
}
代码处理的是什么:
说明: 在此处添加上述代码的详细说明。
awk -v start="{{< terminal >}}" -v end="{{< /terminal >}}" '
/```/ && found==""{
if(rest_of_values){
print rest_of_values
rest_of_values=""
}
found=1
val1=$0
next
}
/```/ && found==1{
print start ORS rest_of_values ORS end
rest_of_values=found=""
next
}
{
rest_of_values=(rest_of_values?rest_of_values ORS:"")$0
}
END{
if(rest_of_values){
print val1 ORS rest_of_values
}
}
' Input_file
答案 1 :(得分:2)
perl版本:
while (<>){
if (/```term/ ... /```/){
if (/```term/){
print "{{< terminal >}}\n";
next;
} elsif (/```/) {
print "{{< /terminal >}}\n";
next;
}
}
print;
}
运行命令:
perl test.pl input-file
答案 2 :(得分:1)
这可能对您有用(GNU sed):
sed -i '/^```term/{s//{{< terminal >}}/;:a;n;/^```/!ba;s//{{< \/terminal >}}/}' file
搜索以```term
开头的行,将其替换为{{< terminal >}}
,继续获取和打印行,直到以```
开头的行并用{{< /terminal >}}
替换。其他所有行均正常打印。
答案 3 :(得分:0)
只需尝试一下:(Nested START END doesn't work and there is no sample/question also
)
$str=~s/((\`\`\`)term)((?:(?!\2).)*)(\2)/\{\{< terminal >\}\}$3\{\{<\/ terminal>\}\}/gs;
((\`\`\`)term) # Start match ```term
((?:(?!\2).)*)# Not equal to ```
(\2)# End Match```