1

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

Вот пример того, как файл выглядит:

<skill skill_name="alchemy_s18" requiredPointsSpent="12"  maxLevel="3" priority="37" guiPositionID="17" localisationName="skill_name_alchemy_s18"
/>

<skill skill_name="alchemy_s13" requiredPointsSpent="8" maxLevel="5" priority="37" guiPositionID="16" localisationName="skill_name_alchemy_s13"
/>

Теперь я хочу изменить эти конкретные значения с:

requiredPointsSpent="12"
requiredPointsSpent="8"
To this new value: requiredPointsSpent="0"

Должен быть намного более простой способ, чем редактировать эти значения вручную, запись за записью.

2 ответа2

1

Вы можете использовать Cygwin и Sed. Установите флажок для sed в качестве пакета для установки при установке cygwin, и в нем перечислены все пакеты.

Три файла, каждый из которых содержал слово привет, они были созданы с помощью линий эха.

Затем с помощью одной строки sed я выполнил поиск и замену всех файлов в каталоге.

Затем я отобразил содержимое файла «а» и, как вы видите, написано «книга», поэтому оно изменилось, как и файлы «b» и «с».

Так что все, что вам нужно сделать, это изменить

$ sed -i 's/hello/book/g' *

Для поиска и замены, например,

$ sed -i 's/requiredPointsSpent="12"/requiredPointsSpent="0"/g' *

и делать

$ sed -i 's/requiredPointsSpent="8"/requiredPointsSpent="0"/g' *

Итак, вы хотели бы эти две строки sed -i.

Для альтернативы GUI, вы можете посмотреть на powergrep или бесплатные альтернативы.

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

$ mkdir asdf1

$ cd asdf1

~/asdf1
$ echo hello>a

~/asdf1
$ echo hello>b

~/asdf1
$ echo hello>c


~/asdf1
$ sed -i 's/hello/book/g' *

~/asdf1
$ ls
a  b  c

~/asdf1
$ cat a
book

~/asdf1
$
1

редактировать: см. ответ Барлопа, который гораздо лучше подходит для задачи изменения множества файлов одновременно. Я оставляю то, что ниже (хорошо для изменения одного файла за раз) для справки, пока.


В Notepad++ вы можете использовать часть Regex для функции поиска / замены. В этом случае я бы использовал регулярное выражение вроде: (requiredPointsSpent)="(12|8)" и строку подстановки, например: $1="0" . Важной частью является то, что вторая группа (обозначается (12|8)) соответствует 12 или 8 между " . Вы можете использовать https://regex101.com/, чтобы поэкспериментировать с вашим конкретным регулярным выражением, или использовать http://www.regular-expressions.info/ для общего ознакомления.

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