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

如何从applications.txt文件提取两个搜索模式间的字符串(含模式)

嗨,我来帮你搞定这个文本提取的问题!从你的描述和示例来看,你需要从applications.txt里揪出那些以x01g开头的主机名——这些主机名刚好被夹在连字符之间。下面我给你几种常用的命令行工具方案,都是Linux/Unix环境下的实用工具:

使用grep快速提取

grep是处理文本匹配的利器,用它可以直接只输出你要的内容:

grep -o 'x01g[^-]*' applications.txt

解释一下:

  • -o参数让grep只输出匹配到的部分,而不是整行内容;
  • x01g[^-]*是正则表达式:x01g匹配开头,[^-]*表示匹配任意个不是连字符的字符,刚好能精准截取到主机名的结尾(因为后面跟着的就是连字符啦)。
使用sed替换提取

sed擅长文本替换,我们可以把整行里不需要的内容都替换掉,只留下目标主机名:

sed 's/.*-\(x01g[^-]*\)-.*/\1/g' applications.txt

解释:

  • .*-\(x01g[^-]*\)-.*匹配整行内容,其中\(x01g[^-]*\)是我们要保留的部分(用括号捕获成分组);
  • \1表示引用第一个捕获的分组,用它来替换整行,就只剩下我们要的主机名了;
  • g表示全局替换,不过这里每行只有一个目标,加不加都可以,但加上更稳妥。
使用awk按字段提取

awk可以把每行按分隔符拆成字段,然后我们找符合条件的字段就行:

awk -F '-' '{for(i=1;i<=NF;i++) if($i ~ /^x01g/) print $i}' applications.txt

解释:

  • -F '-'指定用连字符作为字段分隔符,把每行拆成一个个小字段;
  • 循环遍历每个字段,如果字段以x01g开头(/^x01g/),就打印这个字段。

额外需求:区分UAT/PROD环境

如果你还想同时知道每个主机名属于哪个环境(UAT或PROD),可以用awk扩展一下:

awk -F '-' '{for(i=1;i<=NF;i++) if($i ~ /^x01g/) {for(j=i+1;j<=NF;j++) if($j ~ /UAT|PROD/) print $i, "(" $j ")"}}' applications.txt

这个命令会输出类似x01gmobdb2a (PRD)这样的结果,清晰对应主机名和环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:23:19