Разбор файла, извлечение содержимого и выполнение операции с извлеченным содержимым.

У меня есть 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 ответ

Это будет работать для предоставленного вами образца. Я также предположил, что * часть интересующей строки на самом деле не является частью вашего входного файла, но если это так, то потребуется подстройка:

$ 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...)

Dryrun с echo и если вы довольны результатом, удалите echo и перезапустить.

Другие вопросы по тегам