Я придумал свое решение, прежде чем нашел этот вопрос (и ответы). Я искал разные комбинации «replace» «несколько» и «xml», потому что это было мое приложение, но не нашло его.
Моя проблема: у меня были весенние xml-файлы с данными для тестирования случаев, содержащих сложные объекты. Рефакторинг в исходном коде java изменил много классов и не применился к файлам данных xml. Чтобы сохранить данные тестовых случаев, мне нужно было изменить все имена классов во всех xml-файлах, распределенных по нескольким каталогам. Все, сохраняя резервные копии исходных xml-файлов (хотя это не было обязательным, так как управление версией меня спасло здесь).
Я искал некоторую комбинацию find
+ sed
, потому что он работал для меня в других ситуациях, но не с несколькими заменами сразу.
Затем я нашел ask ubuntu response , и это помогло мне создать мою командную строку:
find -name "*.xml" -exec sed -s --in-place=.bak -e 's/firstWord/newFirstWord/g;s/secondWord/newSecondWord/g;s/thirdWord/newThirdWord/g' {} \;
И это сработало отлично (ну, у моего дела было шесть разных замен). Обратите внимание, что он будет касаться всех * .xml-файлов в текущем каталоге. Из-за этого, и если вы подотчетны системе управления версиями, вы можете сначала фильтровать и только перейти к sed
тем, у кого есть нужные строки; например:
find -name "*.xml" -exec grep -e "firstWord" -e "secondWord" -e "thirdWord" {} \; -exec sed -s --in-place=.bak -e 's/firstWord/newFirstWord/g;s/secondWord/newSecondWord/g;s/thirdWord/newThirdWord/g' {} \;
Отделение со ссылкой (BL) копирует адрес следующей инструкции (после BL) в регистр ссылок. Инструкция ветвления не работает. BL будет использоваться для вызова подпрограммы, поэтому, когда вы захотите вернуться туда, где вы были, вы можете вернуться обратно в реестр ссылок.