好吧,我正在尝试找出如何使用通配符来改变一个非常具体的值,主要是在 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)
)匹配12
或8
介于之间"
。您可以使用https://regex101.com/进行实验并实时解释你的特定正则表达式,或者使用http://www.regular-expressions.info/仅供一般参考。