regex - 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
会更好吗?还是正则表达式的不同方法?
解决方案
那么纯 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.
推荐阅读
- json - 如何从我使用 angular6 的 api 访问 JSON 数据响应
- tensorflow - Tensorflow-NSL 能解决最短路径问题吗?
- wso2 - 如何在 WSO2 身份服务器中自定义用户创建 API 中的字段
- php - 如何获取对数组中传入的值的查询结果(mySQL 和 PHP)
- swift - 字符串中带有双引号的 Alamofire 请求参数
- powershell - PowerShell十进制数排序问题
- out-of-memory - Azure 函数主机因 OutOfMemoryException 而死,但未触发
- reactjs - 同一域但路径不同的不同单页应用程序
- sql - 如何选择未超过不同列的多个值的记录
- nunit - 如何将数据库连接字符串传递给 TeamCity 上的 NUnit 跑步者?