2013-10-04 3 views
1

Я бы хотел использовать sed для удаления всех символов между «foo = 1 &» и «bar = 2 &» для всех вхождений в XML-файле.sed: удалять символы между двумя строками

<url>http://example.com?addr=123&foo=1&s=alkjasldkffjskdk$bar=2&f=jkdng</url> 
<url>http://example.com?addr=124&foo=1&k=d93ndkdisnskiisndjdjdj$bar=2&p=dnsks</url> 

Вот моя СЭД команда:

sed -e '/foo=1&/,/bar=2&/d' sample.xml 

Когда я запускаю этот файл не изменяется.

выше основано на следующем примере: Find "string1" and delete between that and "string2"

+0

Да. Когда я добавляю флаг -i, я получаю пустой файл – Sparky1

+1

Возможно, это нужно будет перенести в пакетный обмен Linux/Unix. – Plasmarob

ответ

5

Используйте команду подмена вместо команды удалить:

sed -e 's/\(foo=1&\).*\(bar=2&\)/\1\2/' 
+0

Это прекрасно работает! Огромное спасибо. – Sparky1

+0

Это тоже работало для меня, но не могли бы вы объяснить, что именно делает команда? – TheWalkingData

+0

's/regex/replacement /' заменяет первое соответствие для 'regex' в каждой строке с помощью' replacement'. 'regex' может содержать _groups_, и эти _groups_ могут ссылаться на' \ 1', '\ 2' и т. д. В этом случае эта функция строго не требуется, и вы можете использовать панель' s/foo = 1 &. * = 2 &/foo = 1 & bar = 2 &/'вместо. – nosid

2

Вы должны использовать

sed -i -e 's/\(foo=1&\).*\(bar=2&\)/\1\2/' your_html.xml 
Смежные вопросы