Regex 搜索字符串的正则表达式
命令Regex 搜索字符串的正则表达式,regex,bash,Regex,Bash,命令 grep-rcmake\u C\u COMPILER\u ID为我提供以下输出: printtimestamp.dir/DependInfo.cmake:SET(CMAKE_C_COMPILER_ID "GNU") 2.8.10.1/CMakeCCompiler.cmake:set(CMAKE_C_COMPILER_ID "GNU") 2.8.10.1/CMakeCCompiler.cmake:set(CMAKE_C_COMPILER_ID_RUN 1) buildtimestart.di
grep-rcmake\u C\u COMPILER\u ID
为我提供以下输出:
printtimestamp.dir/DependInfo.cmake:SET(CMAKE_C_COMPILER_ID "GNU")
2.8.10.1/CMakeCCompiler.cmake:set(CMAKE_C_COMPILER_ID "GNU")
2.8.10.1/CMakeCCompiler.cmake:set(CMAKE_C_COMPILER_ID_RUN 1)
buildtimestart.dir/DependInfo.cmake:SET(CMAKE_C_COMPILER_ID "GNU")
buildtimeend.dir/DependInfo.cmake:SET(CMAKE_C_COMPILER_ID "GNU")
我想从中提取字符串GNU
(请注意,该字符串可能并不总是GNU,它可能是其他编译器,例如CYGWIN
)。我可以用grep
来实现这一点的正则表达式是什么?任何其他等效解决方案也可以。这将在bash脚本中使用
很抱歉,如果问题太具体,我不知道如何构建它。假设您的
grep
支持,您可以说:
grep -oPr 'CMAKE_C_COMPILER_ID "\K[^"]*'
这将返回
CMAKE\u C\u COMPILER\u ID
后引号内的字符串。假设grep
支持,您可以说:
grep -oPr 'CMAKE_C_COMPILER_ID "\K[^"]*'
这将在CMAKE\u C\u COMPILER\u ID
之后返回引号内的字符串。还有一种方法:
awk '/CMAKE_C_COMPILER_ID / && sub(/\)$/,"",$NF) && $0=$NF' inputFile
我们告诉awk:
- 通过在
/../
- 如果找到,使用
功能放弃sub
)
- 如果成功,则打印最后一个字段
gnu sed
:
使用sed
:
- 我们在找符合你的式样的线
- 使用捕获的组
抓取所有内容直到(..)
)
- 使用背面参照打印
\1
禁用默认打印-n
允许在成功的行上打印p
允许我们使r
更具可读性。如果不支持sed
,则可以使用-r
-E
- 还有另一种方法:
awk '/CMAKE_C_COMPILER_ID / && sub(/\)$/,"",$NF) && $0=$NF' inputFile
我们告诉awk:
- 通过在
/../
- 如果找到,使用
功能放弃sub
)
- 如果成功,则打印最后一个字段
gnu sed
:
使用sed
:
- 我们在找符合你的式样的线
- 使用捕获的组
抓取所有内容直到(..)
)
- 使用背面参照打印
\1
禁用默认打印-n
允许在成功的行上打印p
允许我们使r
更具可读性。如果不支持sed
,则可以使用-r
-E
head
(特别是传送到head-1
)。如果您不想要文件名,可以说grep-oPh'CMAKE_C_COMPILER_ID“\K[^”]*”*| head-1
。这样做很有效,而且一切都有意义。谢谢你的帮助。您还可以给我指一个资源,让我更深入地了解这一点。对于不支持PCRE的系统,是否有其他解决方案?@Ankeshana并查看grep
文档:info grep
。另外请查看答案中提供的链接。谢谢。这很接近我想要的。如何使grep不显示文件名,以及如何确保我只首先获得1(或第一个)?@ankeshana如果您只想要第一个结果,请将结果传送到head
(特别是传送到head-1
)。如果您不想要文件名,可以说grep-oPh'CMAKE_C_COMPILER_ID“\K[^”]*”*| head-1
。这样做很有效,而且一切都有意义。谢谢你的帮助。您还可以给我指一个资源,让我更深入地了解这一点。对于不支持PCRE的系统,是否有其他解决方案?@Ankeshana并查看grep
文档:info grep
。另请查看答案中提供的链接。@Ankeshana并添加了一个sed
选项。回报你的支持<代码>:)@ankeshana并添加了一个sed
选项。回报你的支持<代码>:)