我有一个包含大量内容的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做这件事。
答案 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
之外的其他内容来实际复制您的内容(tar
,cpio
,rsync
,...)使用echo
进行Dryrun,如果您对输出感到满意,请移除echo
并重新运行。