gpt4 book ai didi

regex - 使用 sed 提取 XML 文件的元素内容

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:56 25 4
gpt4 key购买 nike

好吧,使用 sed我正在尝试提取 <Transport_key> 之间的所有内容和 </Transport_key>来自这样的输入文件:

<?xml version="1.0" encoding="utf-8"?>
<Envelope xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<Header>
<Security>
<Transport_key>
<EncryptedKey Id="TK" xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" />
<CipherData>
<CipherValue>pifKajuAK8FKwqLEhKIP4x5V5XUQyrwhpA</CipherValue>
</CipherData>
</EncryptedKey>
</Transport_key>
</Security>
</Header>
<Body>
</Body>
</Envelope>

所以我想得到

<EncryptedKey Id="TK" xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" />
<CipherData>
<CipherValue>pifKajuAK8FKwqLEhKIP4x5V5XUQyrwhpA</CipherValue>
</CipherData>
</EncryptedKey>

不考虑元素之间的任何可选换行符。我只想不修改两个字符串之间的文本,即使输入是一行大行也是如此。

我试过

sed -e "s@.*<Transport_key>\(.*\)</Transport_key>.*@\1@" test.txt

但与此同时我了解到,sed每行输入一行,它无法工作。

有解决办法吗?

最佳答案

对于您的“最后一次尝试没有这样的......”,grep 方法:

grep -Poz '<Transport_key>\s*\K[\s\S]*(?=</Transport_key>)' test.txt

输出:

<EncryptedKey Id="TK" xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" />
<CipherData>
<CipherValue>pifKajuAK8FKwqLEhKIP4x5V5XUQyrwhpA</CipherValue>
</CipherData>
</EncryptedKey>

为了您的进一步正确尝试,xmlstarlet方法:

xmlstarlet sel -t -c '//Transport_key/*' -n test.txt

关于regex - 使用 sed 提取 XML 文件的元素内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44957822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com