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

如何用Perl或Sed提取指定文件名并排除特定后缀内容?

解决方案

Perl 实现方案

你之前的命令存在语法错误,先修正去除logs/之前部分的逻辑,再添加剔除_value_javac10+.log及其后续内容的规则,以下是两种可行写法:

一步替换

perl -pe 's!^.*/logs/(.*?)_value_javac10\+\.log.*$!$1!' Filename
  • 用!作为正则分隔符,避免和路径中的/冲突
  • ^.*/logs/匹配行首到logs/的所有内容
  • (.*?)非贪婪捕获_value_javac10+.log之前的目标字符串
  • _value_javac10\+\.log.*$匹配后缀及行尾剩余内容,最终替换为捕获的目标字符串

分步替换(更易读)

perl -pe 's!^.*/logs/!!; s!_value_javac10\+\.log.*$!!' Filename
  • 第一条规则先删除行首到logs/的部分
  • 第二条规则删除_value_javac10+.log及之后的所有内容

Sed 实现方案

Sed 支持基础正则(BRE)和扩展正则(ERE)两种写法,按需选择:

基础正则(无需额外选项)

sed 's/^.*\/logs\///; s/_value_javac10\+\.log.*$//' Filename
  • 逻辑和Perl分步替换一致,注意BRE中+和.需要转义

扩展正则(更简洁,需-E选项)

sed -E 's/^.*\/logs\/(.*)_value_javac10\+\.log.*$/\1/' Filename
  • -E启用扩展正则,无需转义+以外的特殊字符
  • 通过捕获组直接提取目标内容,一步完成替换

示例验证

假设输入行:

/opt/project/logs/service_api_value_javac10+.log
执行上述命令后,输出结果为:
service_api

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:20:14