Я не использовал его лично, но похоже, что Крошечный Крошечный RSS мог бы сделать то, что Вы хотите. Это - веб-приложение (Apache + PHP + PostgreSQL), который может генерировать переподачу на основе различных критериев.
sed -e 's!<E> *!<E> !g' -e 's! *</E>! </E>!g'
(Примечание: я использовал !
вместо #
или /
как мой разделитель регулярного выражения. Персональное предпочтение.)
sed
может быть передан больше чем одна команда для работы ее входа, пока каждый снабжается префиксом -e
флаг.
*
после пространства в регулярных выражениях выше средств "соответствуют 0 или больше пробелам". re_format
страница справочника дает больше информации о таком повторении:
Атом, сопровождаемый'
*
'соответствует последовательности 0 или больше соответствий атома. Атом, сопровождаемый'+
'соответствует последовательности 1 или более соответствий атома. Атом, сопровождаемый'?
'соответствует последовательности 0 или 1 соответствия атома.
где "атом" является подшаблоном перед *
, +
, или ?
.
Выполнение этого sed
управляйте на своих примерах:
reedm@www:/tmp $ cat > example.txt
<E>This is text </E>
<E> This is text</E>
<E> This is text </E>
<E> This is text </E>
reedm@www:/tmp $ sed -e 's!<E> *!<E> !g' -e 's! *</E>! </E>!g' example.txt
<E> This is text </E>
<E> This is text </E>
<E> This is text </E>
<E> This is text </E>
"по крайней мере одно пространство" / \+/
"нуль или больше пробелов" / */
"не пространство" /[^ ]/
"two or more spaces" is either / */ or / \+/
sed -i 's#<E>[^ ]#<E> #g'
удаляет любой символ, после </E>
и замены это с пространством. Так <E>blah </E>
становится <E> lah </E>
. Вы уверены, что это - правильный синтаксис для "никакого пространства"?
– Questioner
21.02.2013, 05:18
s#<E>\([^ ]\)#<E> \1#
– Hauke Laging
21.02.2013, 05:34
echo $STRING | tr -s " "
должен устранить несколько последовательных пробелов и уменьшить их до одиночного пробела. Затем Вам решать, чтобы решить, как Вы хотите обработать тот единственный пробел.
Посмотрите на регулярные выражения, обработанные sed(1)
. Под многими опциями Вы имеете существует \+
повторить предшествование 1 или более раз. Так, sed -i -e 's; \+</E>;</E>;g' *.txt
удалит любое количество пробелов прежде </E>
. Посмотрите на информационное руководство для GNU sed (я нахожу pinfo(1)
самый хороший читатель, но YMMV), странице справочника определенно недостает. Под подробным узлом, перечисляющим проверку "Регулярные выражения".