Замена пробелов внутри xml-тегов (нужно быстрое решение)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Замена пробелов внутри xml-тегов

Сообщение t.t »

Нужно заменить в xml-файлах пробелы внутри тегов неким временным символом, чтобы тег обрабатывался как одно слово. Делаю

Код: Выделить всё

sed ":N; s/\(<[^> ]*\) /\1{}/; t N"
Получается "ну о-очень" медленно; возможно, потому, что в файлах очень длинные строки. Предложите более быстрый вариант.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Замена пробелов внутри xml-тегов

Сообщение /dev/random »

sed 's/</\n&/g;s/>/&\n/g' | sed '/</s/ /{}/g'

Как и первоначальный вариант, работает только если внутри тегов в кавычках нет знаков < >.
Имеет побочный эффект: отделяет теги с обеих сторон переводами строк. При желании никто не мешает их после этого удалить.

Дополнение: неплохо бы ещё перед этим _совсем_ удалить разрывы строк (например, с помощью tr), т.к. с наличием разрывов внутри тегов скрипт не справится.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Замена пробелов внутри xml-тегов

Сообщение /dev/random »

Дополнение 2:
tr '\n' '\r' | sed 's/</\n&/g;s/>/&\n/g' | sed '/</s/[ \t\r]/{}/g' | tr -d '\n' | tr '\r' '\n'
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Замена пробелов внутри xml-тегов

Сообщение t.t »

Спасибо. Как я сразу не сообразил сделать чтобы каждый тег соответствовал отдельной строке?.. Конечно, так намного быстрее.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали: