You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从XML输出中提取ABC格式地址并按行单独展示?

解决方法

方案一:修正grep正则表达式

直接调整Perl正则,精准匹配完整的ABC开头地址:

cat file_name.xml | grep -i pattern1 | grep -Po 'ABC[^,]+?\.com'

解释:

  • [^,]+? 匹配任意非逗号的字符(+?是贪婪匹配的反向,避免过度截取),刚好能捕获每个逗号分隔的ABCxxx.com地址。

方案二:先提取标签内容再拆分

如果需要适配后续可能的格式变化,可以先把<list_of_names>标签内的内容单独提取,再将逗号替换为换行:

cat file_name.xml | grep -i pattern1 | grep -Po '(?<=<list_of_names>).*?(?=</list_of_names>)' | tr ',' '\n'

要是只想保留ABC开头的地址,再加一层过滤即可:

cat file_name.xml | grep -i pattern1 | grep -Po '(?<=<list_of_names>).*?(?=</list_of_names>)' | tr ',' '\n' | grep '^ABC'

你之前命令出错的原因

你用的ABC*com正则存在语法误解:正则里的*是修饰前一个字符的,这里它作用在C上,表示「匹配0个或多个C」,所以只会匹配到ABC,后面的数字和.com都不会被纳入匹配范围,自然只输出ABC。

其他可选工具方案

使用sed:

cat file_name.xml | grep -i pattern1 | sed -E 's/<list_of_names>(.*)<\/list_of_names>/\1/' | tr ',' '\n'

使用awk:

cat file_name.xml | grep -i pattern1 | awk -F '[<>]' '{print $3}' | tr ',' '\n'

内容的提问来源于stack exchange,提问作者Dazzler95

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:35:12