无法使用bash脚本找到并使用其类名替换元素?

时间:2017-01-31 00:00:15

标签: bash shell scripting

我想编写用于搜索的bash脚本,按类名复制和粘贴元素。我是bash的新手。有人可以帮我或给我一个建议吗?

例如,

<div class="elementOne">..</div>
<div class="elementTwo">
   <div class="SubelementOne">....</div>
   <div class="SubelementTwo">....</div>
</div>

我想选择&#34; SubelementTwo&#34;并把它放在&#34; elementOne&#34;

之下

1 个答案:

答案 0 :(得分:3)

首先将HTML转换为XHTML,然后使用XML工具进行任何修改。

如果你有这样的输入:

$ cat foo
<div class="elementOne">..</div>
<div class="elementTwo">
   <div class="SubelementOne">....</div>
   <div class="SubelementTwo">....</div>
</div>

使用tidy将其清理为有效的XHTML,然后在类SubelementTwo的元素下轻松移动类elementOne的元素:

$ tidy -asxhtml foo 2>/dev/null | \
    xmlstarlet ed -m '//*[@class="SubelementTwo"]' '//*[@class="elementOne"]'

<?xml version="1.0"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.2.0"/>
    <title/>
  </head>
  <body>
    <div class="elementOne">..<div class="SubelementTwo">....</div></div>
    <div class="elementTwo">
      <div class="SubelementOne">....</div>
    </div>
  </body>
</html>

这比regex based解决方案更强大。