首页 > 解决方案 > Grep 正则表达式捕获的组

问题描述

我在文件中有如下行

[Lorem ipsum] - [ipsum23] - Lorem ipsum dolor sit amet.

我想用来grep '[regex]'得到以下结果:

[Lorem ipsum] - Lorem ipsum dolor sit amet.

我有下面的正则表达式,但我不确定如何使用捕获的组grep

grep -oP '(\[[^\]]+\]).+\](.+)'

我试过了:

grep -oP '(\[[^\]]+\])\1.+\](.+)\2'

grep -oP '(\[[^\]]+\])\k.+\](.+)\2'

[^\-]*\-(?<=\-).*

(?<!\-).+(?=\-)- 还尝试使用 Lookaround 来查看我是否可以获取开头和结尾并跳过中间部分,但它没有按预期工作

或者使用sed会更好吗?还是正则表达式的不同方法?

标签: regexgrepsh

解决方案


那么纯 BASH 解决方案呢?像这样的东西:

s='[Lorem ipsum] - [ipsum23] - Lorem ipsum dolor sit amet.'
if [[ $s =~ (.*)\ -\ (.*)\ -\ (.*) ]]; then
    echo "${BASH_REMATCH[1]} - ${BASH_REMATCH[3]}"
fi

结果是:

[Lorem ipsum] - Lorem ipsum dolor sit amet.

推荐阅读