我在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会扩展您的字符串)。
第一个命令的棘手方面是单引号不能包含在单引号字符串中(即使转义也不是一个选项),因此该命令被简单地分成两个单引号字符串,其中"''"
-等于''
-进行了拼接。
另一个棘手的方面是获取所有特殊正则表达式字符的转义。正确的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句