Regex sed语法,错误不匹配(或\(

Regex sed语法,错误不匹配(或\(,regex,sed,cmake,Regex,Sed,Cmake,试图用另一个cmake文件中的#using sed注释掉cmake文件中的“cmake_policy(SET CMP0022)”。尝试了转义(和空格,但我不知怎么做都不对。正确的语法是什么 set(PATCH_CMP0022 "s/cmake_policy\\(SET\\ CMP0022/#cmake_policy(SET\\ CMP0022/") sed ${PATCH_CMP0022} ${PATCH_FILE} -i 如果重要的话,这是我的整个cmake代码块 if(NOT EXISTS

试图用另一个cmake文件中的#using sed注释掉cmake文件中的“cmake_policy(SET CMP0022)”。尝试了转义(和空格,但我不知怎么做都不对。正确的语法是什么

set(PATCH_CMP0022 "s/cmake_policy\\(SET\\ CMP0022/#cmake_policy(SET\\ CMP0022/")
sed ${PATCH_CMP0022} ${PATCH_FILE} -i
如果重要的话,这是我的整个cmake代码块

if(NOT EXISTS ${NAME}-patch)
    message("--- Patching ${NAME} ---")
    set(PATCH_CMP0022 "s/cmake_policy\\(SET\\ CMP0022/#cmake_policy(SET\\ CMP0022/")
    message(${PATCH_CMP0022})
    set(PATCH_SOURCE_DIR "s/CMAKE_SOURCE_DIR/CMAKE_CURRENT_SOURCE_DIR/")
    set(PATCH_FILE "${NAME}-src/CMakeLists.txt")
    execute_process(
        COMMAND sed ${PATCH_CMP0022} ${PATCH_FILE} -i
        COMMAND sed ${PATCH_SOURCE_DIR} ${PATCH_FILE} -i
        COMMAND touch ${NAME}-patch
        WORKING_DIRECTORY ${PATH_LIB})
endif()

如果您的数据在'd'文件中,请尝试gnu sed最多3()对检查

 sed -E 's/.*\([^\)]+[^\)]*$|.*(\(.*){2}\)[^\)]*$|.*(\(.*){3}\)\)[^\)]*$/#&/' 

没有
-r
选项。因此,您不需要在sed命令中转义任何内容:
set(PATCH_CMP0022“s/cmake_policy(set CMP0022/#cmake_policy(set CMP0022/”)
。另外,最好将对该变量的引用括在双引号中-
“${PATCH_CMP0022}”
,这样cmake就不会特别处理分号了(对于将使用分号的情况)。