替换awk(或其他)中的多行

时间:2017-11-02 10:08:50

标签: regex shell awk sed replace

我一直在尝试使用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脚本中用于自动化。

2 个答案:

答案 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 = ...行的分割,但是当我运行脚本时它是一行,所以这只是这篇文章中的编辑问题。