У меня есть файл XML, который содержит часть, как указано ниже.

<Target name=something>
     < other content here>
</Target>

Теперь, как я могу удалить это содержимое из моего файла с помощью команды sed? Я попробовал ниже, но не сработало.

sed -ir  's/\<Target Name\=.*.\<\/Target\>//g' filename

Пожалуйста посоветуй.

2 ответа2

4
  1. Вы должны использовать инструменты XML для управления структурами XML

  2. sed предназначен для построчной обработки, возможно, вы захотите использовать awk для решения этого типа подстановки.

Чтобы решить вашу проблему с awk:

awk '/<Target /,/<\/Target>/ { next } 1' your_file

редактировать:

только что нашел: sed может сделать то же самое

sed '/<Target /,/<\/Target>/d' your_file
2

Джон фактически ответил на большую часть вашего вопроса. Однако я заметил, что вы собираетесь редактировать на месте, предоставив опцию -i для sed . Обратите внимание, что этот параметр принимает необязательный аргумент SUFFIX. Если предоставляется SUFFIX, то резервная копия входного файла создается путем добавления SUFFIX к его имени. Весьма вероятная проблема в вашей командной строке состоит в том, что буква 'r' в -ir интерпретируется как суффикс резервной копии, а не как отдельный параметр -r . Для достижения желаемого эффекта (если вы не хотите создавать резервные копии файлов во время редактирования на месте), не объединяйте другие параметры с -i (или убедитесь, что i всегда на последнем месте):

# All these do the same thing (in-place editing using extended regular expressions)
sed -r -i ...
sed -i -r ...
sed -ri ...

# This one backs up input files by appending the letter 'r' to their names
# (and DOES NOT use extended regular expressions)
sed -ir ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .