我在文件中有下面这样的行
[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
会更好吗?还是其他使用正则表达式的方法?
答案 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.