如何删除特定单词后面的字符串

如何删除特定单词后面的字符串

我正在尝试从清单文件中删除以特定单词开头的字符串。包含以下行的文件如下所示:

<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

使用 Sed 命令时,您需要-i更改文件。如果不使用 -i,它将打印到 stdout,您可以检查该命令是否适合您。

尝试sed -i "s/publicKeyToken=\"[0-9][a-z]*//g"

另外,还有一个命令可以删除以某内容开头的行。如果要删除 publicKeyToken 行,可以使用

sed -i '/pattern to match/d' ./infilesed -i '/publicKey/d' yourfile.text 这个网站对命令的功能提供了很好的帮助, Sed 帮助

也可以看看堆栈溢出答案删除行

答案2

sed我强烈建议不要使用正则表达式来处理 XML。至少对于这个例子来说,还有其他工具可以更好地帮助你。其中一个工具就是优秀的XMLStarlet 工具包. 它可以在 Windows、Linux 和 MacOS 下使用。

话虽如此,如果您仍想继续使用sed,那么我立即发现导致问题的一点就是这里的这一点:[0-9]*[a-z]*。它仅匹配以零个或多个数字开头,后跟零个或多个字母的文本。您需要的是[0-9a-f]{16}

看看这些正则表达式沙盒。它们非常适合测试你的正则表达式:

http://www.regexr.com/

http://www.rubular.com/

http://regexpal.com/


相关内容