regex - 如何获取正则表达式匹配的子组的内容

标签 regex shell grep

像这样: p.txt

abc-111-zzz-022-ffff
abc-222-zzz-033-ffff
abc-333-zzz-044-ffff

我可以获得完整的匹配(正则表达式中的$0):

[root@ser user]# grep -Po 'abc\-([0-9]+)\-zzz\-([0-9]+)' p.txt
abc-111-zzz-022
abc-222-zzz-033
abc-333-zzz-044

如何仅获取子组内容$1$2,例如:

111022
222033
333044

谢谢!

最佳答案

grep不允许打印捕获组。使用sed :

sed -E 's/abc-([0-9]+)-zzz-([0-9]+).*/\1\2/' file

111022
222033
333044

或者,如果您有pcregrep然后使用此命令打印前 2 个捕获组:

pcregrep -o1 -o2 'abc-([0-9]+)-zzz-([0-9]+)' file

111022
222033
333044

关于regex - 如何获取正则表达式匹配的子组的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67676149/

相关文章:

java - Eclipse搜索结果具体方法

javascript - 正则表达式检查字母、数字和符号

linux - 递归删除文件和文件夹

bash - 如何使用 shell 脚本有效地处理大型 csv 文件,以获得比以下脚本更好的性能?

linux - 计算除列表文件外的所有文件的MD5

c# - 用于匹配重复的连续标点符号的正则表达式,但 3 个句点除外

javascript - 如何使用正则表达式仅在 Javascript 中删除单个类?

shell - 提取目录路径和文件名

regex - 如何使用 grep/egrep 在文件中查找重复的单词?

RegEx 用于查找单词之间只有一个空格的单词