使用grep提取模式后的单词字符与逗号,如何规避末尾的']输出
解决grep提取时末尾带']'的问题
看起来你是想从包含[foo,bar,baz]这类格式的文本里,精准提取出foo,bar,baz对吧?其实只要调整grep的正则和参数就能搞定,给你几个实用方案:
方案1:用GNU grep的精准匹配+正向预查
如果你的环境是Linux(用GNU grep),可以直接用带正向预查的正则,只匹配[之后、]之前的目标内容:
grep -oE '(?<=\[)[a-zA-Z]+(,[a-zA-Z]+)*' 你的输入文件
-o:只输出匹配到的部分,而不是整行-E:启用扩展正则表达式,让语法更简洁(?<=\[):正向预查,确保匹配的内容前面是[(但不会把[包含在结果里)[a-zA-Z]+(,[a-zA-Z]+)*:匹配一个或多个字母,后面可以跟着任意次「逗号+字母」的组合,刚好对应foo,bar,baz这种格式
比如输入文本是some text [foo,bar,baz] other text,运行命令后就只会输出foo,bar,baz。
方案2:兼容BSD grep(比如macOS)的方案
如果是macOS这类用BSD grep的环境,正向预查语法可能不支持,换用sed更稳妥:
sed -E 's/.*\[([a-zA-Z]+(,[a-zA-Z]+)*)\].*/\1/' 你的输入文件
这个命令的逻辑是:把整行里[和]之间的内容捕获到分组1,然后替换整行为分组1的内容,直接得到目标字符串。
方案3:通用的awk方案
也可以用awk来处理,逻辑更直观:
awk -F'[][]' '{print $2}' 你的输入文件
-F'[][]':把[和]都作为分隔符print $2:打印分隔后的第二部分,刚好就是[和]之间的foo,bar,baz
这几个方案都能完美避开末尾的],精准提取你要的内容~
内容的提问来源于stack exchange,提问作者rodee
相关产品推荐
相关产品推荐

