Sed - замена html - PullRequest
       4

Sed - замена html

1 голос
/ 04 августа 2009

Вот мой ввод и вывод, который я хочу:

Введите:

<hr /> 
(newline)
( carriage return)
    (tabs, spaces)<div id="sidebar">

Выход:

</div>
<hr />
(newline)
( carriage return)
    (tabs, spaces)<div id="sidebar">

Это не соответствует:

sed -i 's/<hr \/>[[:space:]]*<div id="sidebar">/<\/div><hr \/><div id="sidebar">/g' file.txt

Хмм?

Ответы [ 2 ]

2 голосов
/ 04 августа 2009

Я не думаю, что вы действительно можете сделать это с sed, потому что я не знаю ни одного способа убедить его работать с несколькими линиями одновременно. Он действительно хочет работать по одной линии за раз. Вы можете сделать это довольно легко с помощью Perl:

perl -pi -e 's/<hr \/>\s*<div id="sidebar">/<\/div><hr \/><div id="sidebar">/gs;' -e 'BEGIN { $/ = ""; }' file.txt
0 голосов
/ 05 августа 2009

тогда вам не нужно делать замену. просто проверьте строку "<hr >", затем напечатайте "</div>" перед ней.

awk '/<hr \/>/{    print "</div>" } 1 ' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...