我想插入一行
<hr />
在文件中每次出现标题2行时 - 例如,高于此模式
<h2>variable pattern here</h2>
所以上面应该成为
<hr />
<h2>variable pattern here</h2>
如何使用Vim,Sed或Perl执行此操作?
答案 0 :(得分:10)
vim方式:
cmd :g/<h2>/normal O<hr />
将完成这项工作。
在此处查看:(我从sudo_O中获取了示例)
答案 1 :(得分:8)
使用sed
,您可以执行sed '/<h2>/i <hr />'
:
$ cat file
<html>
<h2>variable pattern here</h2>
<h3>not here</h3>
<h2>heading</h2>
<h2>Something</h2>
$ sed '/<h2>/i <hr />' file
<html>
<hr />
<h2>variable pattern here</h2>
<h3>not here</h3>
<hr />
<h2>heading</h2>
<hr />
<h2>Something</h2>
第一部分/<h2>/
匹配包含<h2>
的行,第二部分使用i
命令在匹配的行上方插入<hr />
。
sed
的一个不错的选项是-i
这会将更改保存回文件而不是打印到stdout
,但请确保更改是正确的。
sed -i '/<h2>/i <hr />' file
答案 2 :(得分:6)
在Vim中执行此操作的众多方法之一:
:g/h2/norm O<hr /><CR>
故障:
:g[lobal]
会对与模式匹配的每一行采取行动,请参阅:h :global
。
h2
我们正在寻找的模式,可能会变得更聪明一点。
norm[al]
运行普通模式命令,请参阅:h :normal
。
O
在当前行上方打开一个新行,然后进入 insert 模式。
<hr />
是您要插入的内容。
我们点击<CR>
(<RETURN>
)来运行整个事情。
另一种方式,使用单一替换:
:%s/^\s*<h2/<hr \/>\r&<CR>
故障:
:%s[ubstitute]/
在缓冲区的每一行执行替换,请参阅:h :s
。
^
将模式锚定到该行的开头。
\s*
匹配任意数字(0到多个)的空格字符。如果您确定所有HTML标记都在第1列,则不是严格要求的。
<h2
是我们真正寻找的模式。
<hr />
是我们想要插入的内容。
由于我们希望它在自己的行上,然后是\r
,
,最后是匹配的文字&
。
答案 3 :(得分:3)
use strict;
use warnings;
use Tie::File;
tie my @file, 'example.html'
or die "Unable to tie file: $!";
@file = map { m!<h2>.*</h2>!
? ( "<hr />", $_ )
: $_ } @file;
untie @file;
答案 4 :(得分:3)
Perl中的命令行解决方案。
perl -i~ -p -e'/<h2>/ and $_ = "<hr />\n$_"' your_file.html
命令行标志的说明:
如果该行包含(/<h2>/
),则在其前面添加<hr />
(当前行在$ _中)。
但你有没有考虑过这是最好的方法?如果你想在每个H2元素上面添加一行,那么也许你应该用CSS做到这一点?
答案 5 :(得分:1)
perl -plne 'print "<hr />" if(/\<h2\>variable pattern here\<\/h2\>/)' your_file
输入文件:
> cat temp
<h2>variable pattern here</h2>
1
<h2>variable pattern here</h2>
2
<h2>variable pattern here</h2>
3
4
<h2>variable pattern here</h2>
现在执行
> perl -plne 'print "<hr />" if(/\<h2\>variable pattern here\<\/h2\>/)' temp
<hr />
<h2>variable pattern here</h2>
1
<hr />
<h2>variable pattern here</h2>
2
<hr />
<h2>variable pattern here</h2>
3
4
<hr />
<h2>variable pattern here</h2>
这将只输出到控制台。 如果你想在里面改变它:
perl -pi -lne 'print "<hr />" if(/\<h2\>variable pattern here\<\/h2\>/)' your_file