-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/user)

我想对所有出现的具有文本的行执行此操作"class=red"

想用 sed 做到这一点。

4

1 回答 1

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"in foo.html( grep),删除所有内容,包括从每一行 ( )<td>开始和包括在内的所有内容,读取每一行并围绕它制作一个命令来复制您的文件。根据输入文件以及您可能拥有/想要的情况和偏好</a>sedcp

  • 调整sed正则表达式或使其更具体
  • 使用其他东西而不是cp实际复制你的东西(tar,,,, cpio... rsync

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

于 2013-05-08T21:04:59.513 回答