我正在尝试从清单文件中删除以特定单词开头的字符串。包含以下行的文件如下所示:
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" **publicKeyToken="1fc8b3b9a1e18e3b**"></assemblyIdentity>
我想从中删除 publicKeyToken="1fc8b3b9a1e18e3b"。
我这样做了:sed -e "s/publicKeyToken=\"[0-9]*[a-z]*\*//g"
,但什么都没有改变。我不能使用 publicKeyToken="1fc8b3b9a1e18e3b" 进行替换,因为“”之间的内容可能会发生变化。
有人知道正确的方法吗?
答案1
答案2
sed
我强烈建议不要使用正则表达式来处理 XML。至少对于这个例子来说,还有其他工具可以更好地帮助你。其中一个工具就是优秀的XMLStarlet 工具包. 它可以在 Windows、Linux 和 MacOS 下使用。
话虽如此,如果您仍想继续使用sed
,那么我立即发现导致问题的一点就是这里的这一点:[0-9]*[a-z]*
。它仅匹配以零个或多个数字开头,后跟零个或多个字母的文本。您需要的是[0-9a-f]{16}
。
看看这些正则表达式沙盒。它们非常适合测试你的正则表达式: