如何用单条egrep命令匹配含指定NBA前缀且不以}结尾的行
解决单条egrep命令匹配指定前缀且不以
}结尾的行 首先,你之前尝试的egrep 'NBA:(red|green|blue)*[^}]$' myfile.txt之所以无效,是因为*被错误地应用在了(red|green|blue)这个分组上——它表示这个分组可以重复0次或多次,完全偏离了你的需求:你需要的是前缀必须是NBA:red/NBA:green/NBA:blue,且整行不以}结尾。
正确的单条egrep命令
egrep 'NBA:(red|green|blue).*[^}]$' myfile.txt
正则表达式拆解
NBA:(red|green|blue):精准匹配行开头的指定前缀,确保只筛选包含目标前缀的行.*:匹配前缀之后的任意长度字符(除换行符外),覆盖中间所有内容[^}]$:锚定行尾,限制最后一个字符不能是},[^}]表示匹配除}外的任意字符
针对行尾含空白字符的优化(可选)
如果你的文件中存在行尾带空格但仍需保留的情况(比如NBA:green this line must match ),可以调整正则,确保最后一个非空白字符不是}:
egrep 'NBA:(red|green|blue).*[^}[:space:]] *$' myfile.txt
执行这条命令后,就能直接得到你想要的输出:
NBA:green this line must match
NBA:red this line has a tab and must match
内容的提问来源于stack exchange,提问作者noe vaz
相关产品推荐
相关产品推荐

