File io 解析文件、提取内容并对提取的内容执行操作

File io 解析文件、提取内容并对提取的内容执行操作,file-io,sed,File Io,Sed,我有一个HTML文件,里面有很多内容。我想从中提取特定的行 例: 我想提取包含此特定内容的多行“class=“red” 提取这一行后,我需要以下字符串:FRQ\AUTO\spml-hlr601\FC122\u 005036\u PDPContext\DB8PD073\BulkPDPModreq 此字符串是一个目录名,我希望将此目录中的内容复制到特定目录(/home/user) 我想对所有出现的文本为“class=red” 希望使用sed执行此操作。这将适用于您提供的示例。我还假设有趣字符串的*部

我有一个HTML文件,里面有很多内容。我想从中提取特定的行

例: 我想提取包含此特定内容的多行
“class=“red”

提取这一行后,我需要以下字符串:
FRQ\AUTO\spml-hlr601\FC122\u 005036\u PDPContext\DB8PD073\BulkPDPModreq

此字符串是一个目录名,我希望将此目录中的内容复制到特定目录(/home/user)

我想对所有出现的文本为
“class=red”


希望使用sed执行此操作。

这将适用于您提供的示例。我还假设有趣字符串的
*
部分实际上不是输入文件的一部分,但如果是,则需要调整:

$ 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
$cat foo.html
福
FRQ\AUTO\spml-hlr601\FC122\U 005036\U PDPContext\DB8PD073\BulkPDPModreq1
FRQ\AUTO\spml-hlr601\FC122\U 005036\U PDPContext\DB8PD073\BulkPDPModreq2
酒吧
FRQ\AUTO\spml-hlr601\FC122\U 005036\U PDPContext\DB8PD073\BulkPDPModreq3
FRQ\AUTO\spml-hlr601\FC122\U 005036\U PDPContext\DB8PD073\BulkPDPModreq4
库克斯

$grep'class=“red”'foo.html\
|sed的#.#g;s#.#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.html
grep
)中搜索
class=“red”
,删除每一行(
sed
)上的所有内容,包括
,以及从
开始的所有内容,读取每一行并在其周围创建一个
cp
命令来复制您的文件。根据输入文件以及您的情况和偏好,您可能需要

  • 调整
    sed
    regex或使其更具体
  • 使用
    cp
    以外的东西来实际复制您的资料(
    tar
    cpio
    rsync
    ,…)

使用
echo
进行干运行,如果您对输出满意,请删除
echo
并重新运行。

我使用了以下命令:grep'class=\'red\''samp.html | sed sed's#.#g;s###g'| xargs-I%echo cp-r/home/hlrci/%/*/home/hlrci/copyrq/echo是“cp-r/home/hlrci/FRQAUTOspml-hlr601FC122_005036_PDPContextDB8PD073BulkPDPModreqDB8PD073/*/home/hlrci/CopyReq/注意:我丢失了cp命令中的“\”字符。我想把“\”转换成“/”并保存它们。我如何实现它。另外,“请提供我了解“s#”命令的链接请参见我的编辑。
s
命令在
sed
手册中有说明,但您可能也会发现它很有用。谢谢您,阿德里安,我已经阅读了这些教程,但我没有看到任何关于“s#”和“g”的具体示例。您如何理解?”#“在这里工作,想获得一些有关它的信息。
sed
允许您使用您选择的分隔符,因此
s/question/句子/
s#question#句
相同。这是一个偏好的问题,取决于你正在替换的字符串,它可以让生活变得更轻松。如果您使用
/
作为分隔符,但您的字符串也包含
/
,则必须对其进行转义,使用不同的字符可以避免这种情况,而且更容易看到。很抱歉没有在第一时间提到这一点。
$ 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/