заменить текст в файле из текстовой строки в другой файл - PullRequest
0 голосов
/ 03 ноября 2011

вот мой вопрос, я использую Ubuntu, и я пытаюсь заменить текст в XML-файле ... из TXT, что у меня есть все изменения, которые я сделал, например

в файле replace.txt яиметь этот

    nameofsearch  | nameforreplace
    nameofsearch1 | nameforreplace1 
    nameofsearch2 | nameforreplace2 

это формат, который программа использует для поиска и замены

, а в файле XML у меня есть nameofsearch

это было сделаноСофт сделан на .net, что я не могу работать на Linux, так что это мой вопрос, как я могу это сделать, используя bash или что-то подобное.

спасибо, Себастьян.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2011

Инструмент, который вы ищете: sed . Если вы хотите заменить str1 на str2 в file1 и сохранить результат в file2, выполните:

sed s/str1/str2 < file1 > file2

Вам нужно экранировать некоторые специальные символы, потому что sed анализирует str1 как регулярное выражение.

В вашем случае необходимы два шага. Первый шаг превращает ваш replace.txt в файл сценария sed, который я называю replace.sed.

sed "s/\s*|\s*/\//g"  "replace.txt" | sed "s/\w*\/\w*/s\/&\/g/" > replace.sed

Первый вызов sed преобразует ваши каналы (и окружающие пробелы) в косые черты | -> /. Второй вызов окружает ваши строки поиска / замены синтаксисом sed. replace.sed должно выглядеть как

s/nameofsearch/nameforreplace/
s/nameofsearch1/nameforreplace1/
s/nameofsearch2/nameforreplace2/

Второй шаг - выполнить sed с указанным файлом сценария в вашем XML-файле.

sed -f replace.sed test.xml > replaced.xml
0 голосов
/ 03 ноября 2011

Возможно, вы попытаетесь использовать Mono для запуска приложения .Net в Linux.

Вы можете использовать AWK для замены или Sed, или поскольку ваши данные в формате XML, используйте XSLT

Я не понимаю, хотите ли вы заменить все вхождения всех имен, которые вы ищете, или только первое вхождениепервого найденного имени.

Является ли файл replace.txt или файл XML, который вы обрабатываете, огромным?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...