我在Makefile中生成了以下代码:
${SED} -i '' -e "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles)
# ${SED} -i "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles)
我想用代替
# ${SED} -i '' -e "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles)
${SED} -i "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles)
所以这只是一个注释掉一行,然后用另一行替换的问题。
但由于单引号和双引号,我无法实现。
如果某位正则表达式专家愿意花1-2分钟帮助我那就太好了。
我在这里拔头发。
感谢
# Comment out 1st line.
sed -E 's`([[:space:]]*${SED} -i '"''"' -e "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles))`#1`' Makefile
# Uncomment 2nd line.
sed -E 's`#([[:space:]]+${SED} -i "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles))`1`' Makefile
sed
命令是单引号字符串,通常更容易使用(不必担心shell会扩展字符串)。
第一个命令的棘手之处在于,单引号不能包含在一个单引号字符串中(甚至转义也不是一个选项),因此该命令只需拆分为两个单引号的字符串,其中"''"
-相当于''
-拼接在一起
另一个棘手的方面是获取所有特殊regex字符的转义。正确的