解析文件,提取内容并对提取的内容执行操作

时间:2013-05-08 10:12:34

标签: file-io sed

我有一个包含大量内容的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 / user)

我希望对包含文本"class=red"

的行的所有出现执行此操作

想用sed做这件事。

1 个答案:

答案 0 :(得分: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/

这会在class="red"foo.html)中搜索grep,删除所有内容,包括<td>以及从每行开始并包含</a>的所有内容(sed),读取每一行并在其周围制作cp命令以复制文件。根据输入文件以及您的情况和偏好,您可能/想要

  • 调整sed正则表达式或使其更具体
  • 使用cp之外的其他内容来实际复制您的内容(tarcpiorsync,...)

使用echo进行Dryrun,如果您对输出感到满意,请移除echo并重新运行。