Unix新手求助:如何提取含标签的指定区间文本(不含整行其他内容)
嗨,作为Unix新手,用sed或者awk这两个工具就能轻松搞定你的需求!我给你整理了两种实用的方法,你只需要替换成自己的目标关键词就行:
方法1:用
sed命令(简单直接) sed是处理文本的利器,这个场景下用它超方便。命令格式是:
sed -n '/你的起始关键词/,/你的结束关键词/p' test.xml
-n参数是让sed只输出我们指定的内容,避免打印整个文件;/起始/,/结束/p表示匹配从包含起始关键词的行到包含结束关键词的行,然后把这些行打印出来。
举个针对你提供的test.xml的例子:如果要提取从<spml:batchResponse到</version>的内容(包括这两个标签本身),命令就是:
sed -n '/<spml:batchResponse/,/<\/version>/p' test.xml
执行后只会输出你要的那段内容,其他无关行完全不会显示。
方法2:用
awk命令(灵活适配复杂场景) 如果你的关键词可能出现在同一行,或者需要更精细的控制,awk会更合适。命令格式是:
awk '/你的起始关键词/{flag=1} flag{print} /你的结束关键词/{flag=0}' test.xml
- 当匹配到起始关键词时,把标记
flag设为1; - 只要
flag是1,就打印当前行; - 匹配到结束关键词后,把
flag设为0,停止打印。
同样用你的示例文件举例,命令就是:
awk '/<spml:batchResponse/{flag=1} flag{print} /<\/version>/{flag=0}' test.xml
小提醒
如果你的关键词里包含正则特殊字符(比如.、*、/、&这些),记得用反斜杠\转义。比如关键词是version="v10&,要写成version=\"v10\&(如果用sed且用/做分隔符,/也要转义,或者换成#之类的其他分隔符,比如sed -n '#起始关键词#,#结束关键词#p' test.xml)。
内容的提问来源于stack exchange,提问作者user1489567
相关产品推荐
相关产品推荐

