Grep Regex捕获的组

时间:2019-02-20 23:18:42

标签: regex grep sh

我在文件中有下面这样的行

[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会更好吗?还是其他使用正则表达式的方法?

2 个答案:

答案 0 :(得分:0)

纯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.

答案 1 :(得分:0)

grep用于选择,sed用于替换。只需匹配您要去除的部分,然后将其替换为空:

echo "[Lorem ipsum] - [ipsum23] - Lorem ipsum dolor sit amet." | sed "s/ \[.*?\] -//"

输出: [Lorem ipsum] - Lorem ipsum dolor sit amet.

演示:https://regex101.com/r/aElbgM/1