Заменить все вхождения символа внутри определенного элемента / тега HTML - PullRequest
1 голос
/ 03 июня 2011

Функция поиска и замены Adobe Dreamweaver предлагает ограничить область действия «только внутри HTML-тега xxxx».

Я хочу сделать это с помощью командной строки Mac OS X '(поэтому сделаю все, что в комплекте с ним).

Например, как мне удалить все вхождения символа «а» внутри всех <h1> с помощью командной строки?

Ответы [ 2 ]

1 голос
/ 03 июня 2011

Вы можете использовать Uned-команду sed (которая также доступна для Mac). например,

$ cat foo.xml 
<h1>axyzabca</h1>
<a href="foo.com">abc</a>
<h1>aa</h1>
<h1>a</h1>
<h1></h1>

$ cat foo.xml | sed 's/<h1>a*\([^a]*\)a*\([^a]*\)a*<\/h1>/<h1>\1\2<\/h1>/g' 
<h1>xyzbc</h1>
<a href="foo.com">abc</a>
<h1></h1>
<h1></h1>
<h1></h1>

(foo.xml - пример ввода, который охватывает общие тестовые случаи)

0 голосов
/ 08 июля 2011

Это не так много, но -

perl -ni -e '
    $/ = undef; $x = <>; $y = "";
    while ($x =~ m#^(.*?<h1>)(.*?)(</h1>)(.*)$#si) {
      $x = $4; $y .= $1; $c = $3;
      ($b = $2) =~ s/a/(something else)/g;
      $y .= $b . $c;
    } print $y . $x;
' filename.html
...