sed заменяет целую строку вместо строки - PullRequest
0 голосов
/ 10 июня 2018

Я хочу просто заменить несколько строк в файле ничем, но sed заменяет всю строку.Может кто-то помочь мне с этим?

строка в файле file.xml:

<tag>sample text1 text2</tag>

Мой код:

 sed "s/'text1 text2'//" file.xml 2>/dev/null || :

Я также пытался

 sed -i -e "s/'text1 text2'//" file.xml 2>/dev/null || :

ожидаемый результат:

<tag>sample</tag>

Фактический результат:

The whole line is removed from file.

Другие:

text1 and text 2 are complex text with .=- characters in it

Что я могу сделать, чтобы это исправить?

TIA

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Вы можете использовать

sed 's/\([^ ]*\)[^<]*\(.*\)/\1\2/' filename

Выход:

<tag>sample</tag>

Группировка используется.Сначала все символы до пробела группируются вместе, затем все символы до < сопоставляются, и все последующие символы группируются в другую группу.

0 голосов
/ 10 июня 2018

Удалить одинарные кавычки:

sed "s/text1 text2//" file.xml
...