2013-05-08 53 views
-1

我有一个包含大量内容的HTML文件。我想从中提取特定的行。解析文件,提取内容并对提取的内容执行操作

例: 我想提取多行具有这种特定的内容"class="red"

<tr class="even"><td>***FRQ\AUTO\spml-hlr601\FC122_005036_PDPContext\DB8PD073\BulkPDPModreq***</a><td align='center' **class="red"**></tr> 

一旦我抽出这条线,我想这个字符串:FRQ\AUTO\spml-hlr601\FC122_005036_PDPContext\DB8PD073\BulkPDPModreq

此字符串是一个目录的名字,我想将内容从这个目录到特定的目录(/ home /用户)复制

我想是要为那些行的所有OCCURENCES做此操作文字"class=red"

想用sed来做到这一点。

回答

0

这将适用于您提供的示例。我也认为有趣的字符串的一部分*是不是真的是你输入文件的一部分,但如果是这将需要的调整:

$ cat foo.html 
foo 
<tr class="even"><td>FRQ\AUTO\spml-hlr601\FC122_005036_PDPContext\DB8PD073\BulkPDPModreq1</a><td align='center' class="red"></tr> 
<tr class="even"><td>FRQ\AUTO\spml-hlr601\FC122_005036_PDPContext\DB8PD073\BulkPDPModreq2</a><td align='center' class="red"></tr> 
bar 
<tr class="even"><td>FRQ\AUTO\spml-hlr601\FC122_005036_PDPContext\DB8PD073\BulkPDPModreq3</a><td align='center' class="red"></tr> 
<tr class="even"><td>FRQ\AUTO\spml-hlr601\FC122_005036_PDPContext\DB8PD073\BulkPDPModreq4</a><td align='center' class="red"></tr> 
quux 

$ grep 'class="red"' foo.html \ 
    | sed 's#.*<td>##g;s#</a>.*##g;s#\\#/#g' \ 
    | xargs -I% echo cp -r /home/hlrci/%/* /home/hlrci/CopyReq/ 
cp -r /home/hlrci/FRQ/AUTO/spml-hlr601/FC122_005036_PDPContext/DB8PD073/BulkPDPModreq1/* /home/hlrci/CopyReq/ 
cp -r /home/hlrci/FRQ/AUTO/spml-hlr601/FC122_005036_PDPContext/DB8PD073/BulkPDPModreq2/* /home/hlrci/CopyReq/ 
cp -r /home/hlrci/FRQ/AUTO/spml-hlr601/FC122_005036_PDPContext/DB8PD073/BulkPDPModreq3/* /home/hlrci/CopyReq/ 
cp -r /home/hlrci/FRQ/AUTO/spml-hlr601/FC122_005036_PDPContext/DB8PD073/BulkPDPModreq4/* /home/hlrci/CopyReq/ 

此搜索在foo.htmlclass="red"grep),除去一切直至并包括<td>和一切从开始并包括</a>在每一行(sed),读出每一行,并工艺品一个cp命令围绕它来复制你的文件。根据输入文件和你的情况,你可能有偏好/想

  • 适应sed正则表达式或使其更具体
  • 使用别的东西比cp实际拷贝你的东西(tarcpiorsync ,...)

Dryrun echo如果您对输出满意,请删除echo并重新运行。

+0

我使用了下面的命令:grep'class = \“red \”'samp.html | sed sed's#。*​​## g; s#。* ## g'| xargs -I%echo cp -r/home/hlrci /%/ */home/hlrci/CopyReq/ 回显为“cp -r/home/hlrci/FRQAUTOspml -hlr601FC122_005036_PDPContextDB8PD073BulkPDPModreqDB8PD073/*/home/hlrci/CopyReq/ :我正在丢失cp命令中的“\”字符,我想将“\”转换为“/”并保留它们,我该如何实现它,还请“提供给我链接以了解”s#“命令 – 2013-05-09 05:27:02

+0

看我的编辑。 ''s'命令在[sed]手册中[here](http://www.gnu.org/software/sed/manual/sed.html#The-_0022s_0022-Command)中有解释,但您可能也会发现[本教程](http://www.grymoire.com/Unix/Sed.html#uh-1)有用。 – 2013-05-09 19:47:41

+0

谢谢阿德里安,我浏览了这些教程,但我没有看到“s#”,“#g”的任何具体示例。 “#”如何在这里工作,想获得关于它的一些信息。 – 2013-05-10 04:45:39