У меня есть XML, мне нужно редактировать с помощью пакета. Как вставить новую строку для каждого вхождения слова abstract_ во всем файле?

Вот строка в xml (9999999x.xml)

<related-object content-type="image.extract" object-type="image/jpeg" specific-use="data" xlink:href="99999999_abstract_ddd.jpg"/><related-object content-type="image.extract" object-type="image/jpeg" specific-use="data" xlink:href="99999988_abstract_ddd.jpg"/><related-object content-type="image.extract" object-type="image/jpeg" specific-use="data" xlink:href="99999977_abstract_ddd.jpg"/><related-object content-type="image.extract" object-type="image/jpeg" specific-use="data" xlink:href="99999966_abstract_ddd.jpg"/>

Как я хотел выглядеть ...

<related-object content-type="image.extract" object-type="image/jpeg" specific-use="data" xlink:href="99999999_abstract_
ddd.jpg"/><related-object content-type="image.extract" object-type="image/jpeg" specific-use="data" xlink:href="99999988_abstract_
ded.jpg"/><related-object content-type="image.extract" object-type="image/jpeg" specific-use="data" xlink:href="99999977_abstract_
dfd.jpg"/><related-object content-type="image.extract" object-type="image/jpeg" specific-use="data" xlink:href="99999966_abstract_
dgd.jpg"/>

Он не должен перезаписывать файл, он просто должен быть сохранен в другом текстовом или временном файле.

Спасибо!

2 ответа2

0

Я видел гибрид пакета и javascript, который выглядит как пакет, но на самом деле он работает на javascript. jrepl.bat Дейва Бенхэма http://www.dostips.com/forum/viewtopic.php?f=3&t=6044

Или сторонняя программа, такая как Perl или Sed. Jcop показывает Reed. Sed стар, в настоящее время люди используют Perl. Эта ссылка показывает, как преобразовать строку поиска и замены в Perl Perl для сопоставления с регулярными выражениями в Terminal? Но можно использовать sed. Sed работает построчно, поэтому не поддерживает \n в разделе поиска (даже «последняя» версия не поддерживает). Но sed (кроме старой версии unxutils) поддерживает его в разделе замены, который вам нужен. Perl, конечно, поддерживает его в поиске или замене.

Вы можете получить sed из gnuwin32 http://gnuwin32.sourceforge.net/packages.html скачать sed там, и если вы делаете это, то я советую также получить gnuwin32 coreutils и все, что вы найдете.

Существует старая версия sed от unxutils, хотя я этого не советую, а старая версия sed, которая есть в unxutils, - это GNU sed версии 3.02, которая не поддерживает \n, поэтому не поможет. В Windows SUA также есть sed, но он также не поддерживает \n и даже не говорит, какая это версия.

Так что получите sed от gnuwin32 или cygwin или MinGW или gow. Не SUA и не unxutils.

0
sed 's/abstract_/abstract_\n/g' 9999999x.xml > 9999999xa.xml

sed - это странный unix редактор, который мало кто когда-либо использовал, кроме как для встроенного редактирования. Он устанавливается во всех дистрибутивах.

В этом случае он берет входной файл, а затем применяет команду между кавычками, которая говорит редактору заменить abstract_ на abstract_\n . g говорит sed идти и делать это по всему файлу.

Он печатает результат в stdout который перенаправляется здесь в 9999999xa.xml . Не перенаправляйте в тот же файл, что и входные данные, так как это может привести к непредсказуемым результатам.

Редактировать: Мы все так зависимы от экранного редактора, где отображается текст, и вы перемещаетесь и редактируете то, что хотите.

sed отличается - вы должны заранее знать, какие команды вы собираетесь применить к файлу, и либо записать их в файл 'script', либо включить команды в саму командную строку. Затем sed будет применять эти команды (в основном) построчно к входному файлу.

Заголовок «in-line-editor», вероятно, был получен благодаря тому, что вы можете вставить sed в командную строку и использовать перенаправление, чтобы сделать его частью процесса ... Пример (который можно оптимизировать):

cat some.txt | sed 's/abstract_/abstract_\n/g' | sort

Таким образом, текст переходит от cat через sed к sort которая называется конвейером. По той же причине sed иногда называют редактором потоков. Взгляните на введение для руководства пользователя sed.

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