我一直在尝试使用SED完成以下操作,但由于SED是基于行的,我担心我无法做到:
sed -ri 's/(<li>\n\s+<a href="#introduction")/<li><div class="toc-group">Topics<\/div><\/li>\1/' index.php
这应该改变这个:
<li>
<a href="#introduction" class="toc-h1 toc-link" data-title="Introduction">Introduction</a>
进入这个
<li><div class="toc-group">Topics<\/div></li><li>
<a href="#introduction" class="toc-h1 toc-link" data-title="Introduction">Introduction</a>
基本上,一个穷人'在特定的地方添加一条线'。遗憾的是,\n
无效。我认为AWK可以做到这一点,但SED是我用过的唯一工具,我对AWK一无所知,所以请帮我解决。
仅供参考我需要在文档的不同部分添加多个项目,因此我需要一个解决方案,允许我选择一部分代码,然后在其前面添加。它将在bash脚本中用于自动化。
答案 0 :(得分:1)
perl one-liner如何:
perl -0777 -ne 's/(<li>\n\s+<a href="#introduction")/<li><div class="toc-group">Topics<\/div><\/li>$1/; print' inputfile
<强>输出:强>
<li><div class="toc-group">Topics</div></li><li>
<a href="#introduction" class="toc-h1 toc-link" data-title="Introduction">Introduction</a>
答案 1 :(得分:0)
我刚开始学习sed和awk,但这种语法似乎在文本之间添加了一行。
sed 's/<li>/<li><div class="toc-group">\n/g' x.txt
输出:
<li><div class="toc-group">
<a href="#introduction" class="toc-h1 toc-link" data-
title="Introduction">Introduction</a>
我只放了index.php的一个子集来减少示例的长度。这里的输出显示了a href = ...行的分割,但是当我运行脚本时它是一行,所以这只是这篇文章中的编辑问题。