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

如何用grep -Po提取字符串指定分段(AWK方案已可行)

使用grep -Po提取指定模式的字符串

需求

需要从一组字符串(或目录文件名)中,提取从开头到第一个连字符(-)后一位的内容,按前缀分组后保留唯一值。例如从ACCEPT组提取ACCEPT-z、ACCEPT-1,从BASIC_REGIS组提取BASIC_REGIS-2、BASIC_REGIS-P,要求用grep -Po(Perl正则、仅匹配)实现。

输入示例

ACCEPT-zABC-0123
ACCEPT-zBAC-0231
ACCEPT-1ABC-0120
ACCEPT-1CBA-0321

BASIC_REGIS-2ABC-9043
BASIC_REGIS-2CBA-8132
BASIC_REGIS-PCCA-6532
BASIC_REGIS-PBBC-3023

期望输出

ACCEPT-z
ACCEPT-1

BASIC_REGIS-2
BASIC_REGIS-P

当前错误的grep尝试

执行以下命令:

echo "ACCEPT-0ABC-0123"|grep -Po "\K^A.*-"

得到结果:ACCEPT-0ABC-,不符合需求(需要ACCEPT-0)。

可行的AWK方案

执行以下命令可得到正确结果:

echo "ACCEPT-1ABC-0120"|awk '$0 ~ /^A/{print substr($0,1,index($0,"-")+1)}'

输出:ACCEPT-1

正确的grep -Po解决方案

使用以下命令(结合sort -u去重):

grep -Po '^[^-]+-.` input.txt | sort -u

正则说明

  • ^:锚定字符串起始位置
  • [^-]+:匹配任意非连字符的字符,直到第一个-出现(对应ACCEPT或BASIC_REGIS前缀)
  • -:匹配第一个连字符
  • .:匹配连字符后的任意单个字符(支持数字、字母等任意类型)

执行后会从输入中提取所有符合模式的内容,再通过sort -u去重,最终得到与期望一致的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:55:20