[英]Bash - How to get multi line text between XML tags
我有一个文本文件...
# <?xml version="1.0" encoding="UTF-8"?>
<response>
<content>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</content>
</response>
我想提取<content>
到</content>
之间的文本。 我努力了:
grep -oP '(?<=<content> ).*?(?= </content>)' file
但是它什么也没输出,我希望最终结果是这样的:
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
我怎样才能做到这一点?
使用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.