繁体   English   中英

Bash-如何在XML标签之间获取多行文本

[英]Bash - How to get multi line text between XML tags

我有一个文本文件...

# <?xml version="1.0" encoding="UTF-8"?>
<response>
<content>Pulsa:Rp200,Bonus:0 s&#x2F;d 12-JUL-17. 1GB Rp10rb.Mau?
1. Mau
2. Info
3. Internet
4. RAMADHAN HOTSALE
5. Nelpon
6. SMS
7. BB
8. NEW:UNLIMITED INTERNET
9. Roaming
10. 100MB2K</content>
</response>

我想提取<content></content>之间的文本。 我努力了:

grep -oP '(?<=<content> ).*?(?= </content>)' file

但是它什么也没输出,我希望最终结果是这样的:

Pulsa:Rp200,Bonus:0 s&#x2F;d 12-JUL-17. 1GB Rp10rb.Mau?
1. Mau
2. Info
3. Internet
4. RAMADHAN HOTSALE
5. Nelpon
6. SMS
7. BB
8. NEW:UNLIMITED INTERNET
9. Roaming
10. 100MB2K

我怎样才能做到这一点?

使用GNU grep和Perl正则表达式( -P ):

grep -Poz '(?<=<content>)(.*\n)*.*(?=</content>)' file.xml

输出:

Pulsa:Rp200,Bonus:0 s/d 12-JUL-17. 1GB Rp10rb.Mau?
1. Mau
2. Info
3. Internet
4. RAMADHAN HOTSALE
5. Nelpon
6. SMS
7. BB
8. NEW:UNLIMITED INTERNET
9. Roaming
10. 100MB2K

替代方法:

tr \\n \\r < test.xml | sed 's:.*<content>\([^<]*\)<.*:\1:' | tr \\r \\n

在这里也尝试使用awk解决方案。

awk '/<\/content>/{sub(/<\/content>/,"");print;A="";next} /<content>/{sub(/<content>/,"");A=1} A'   Input_file

寻找string,如果有任何一行包含该字符串,则用NULL代替并打印当前行,然后将变量A的值设置为NULL。 提及下一个将跳过所有进一步的陈述。 现在,如果有任何行,则查找字符串,然后用NULL替换字符串,并为变量A赋值为1。

现在只写变量A意味着这是一个条件,它将检查A的值是否为TRUE(NOT NULL)然后将打印当前行。(当找到开始的字符串时A的值将为TRUE,并且在关闭时将其设置为NULL在任何行中都可以找到字符串)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM