在记事本++中使用通配符来替换特定范围的条目/值

在记事本++中使用通配符来替换特定范围的条目/值

好吧,我正在尝试找出如何使用通配符来改变一个非常具体的值,主要是在 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"

肯定有一种比手动逐项编辑这些值更简单的方法。

答案1

您可以使用 cygwin 和 sed。在安装 cygwin 时勾选 sed 作为要安装的包,它会列出所有包。

三个文件,每个文件都包含单词 hello,它们是用 echo 行创建的。

然后使用一行 sed,我对目录中的所有文件进行了搜索和替换。

然后我显示了文件“a”的内容,正如您所看到的,它显示“book”,所以它发生了变化,文件“b”和“c”也是如此。

所以你要做的就是改变

$ 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
$

答案2

编辑:请参阅 barlop 的答案,它更适合解决一次修改多个文件的问题。我暂时保留下面的内容(适合一次修改一个文件)以供参考。


在 Notepad++ 中,您可以使用搜索/替换功能的正则表达式部分。在这种情况下,我会使用正则表达式,例如:(requiredPointsSpent)="(12|8)"和替换字符串,例如:$1="0"。重要的是第二组(表示为(12|8))匹配128介于之间"。您可以使用https://regex101.com/进行实验并实时解释你的特定正则表达式,或者使用http://www.regular-expressions.info/仅供一般参考。

在此处输入图片描述

相关内容