我在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分钟帮助我 这将是伟大的。
我在这里拔毛。
由于
答案 0 :(得分:1)
# 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扩展字符串)。
第一个命令的棘手方面是单引号不能包含在单引号字符串中(即使转义不是一个选项),因此该命令只需分成两个单引号字符串"''"
- 相当于''
- 拼接。
另一个棘手的方面是逃避所有特殊的正则表达式字符。右。