AWK中单引号的正确转义方法及FreeBSD下Sendmail m4宏的转义问题求助
AWK中单引号的正确转义方法及FreeBSD下Sendmail m4宏的转义问题求助
各位大佬好,我现在碰到个头疼的问题,想请教下大家:
我需要在FreeBSD系统上用awk或者sed工具,把一段Sendmail的m4宏插入到配置文件里,但转义总是出问题,搞不清到底还有哪些地方需要处理。
要插入的宏是这样的:
define(`RELAY_MAILER_ARGS', `TCP $h 2525')dnl
我尝试用awk命令把这行插入到example.com.mc文件的第90行(放在SMART_HOST配置下面),用的命令是:
awk 'NR==90 { print "define(\`RELAY_MAILER_ARGS\', \`TCP $h 2525\')dnl"}1' example.com.mc
结果执行后直接报错:
Unmatched '"'.
这里特意说明下:宏里的反引号()和单引号(')不是打错了!这是m4语言的古老特性——**m4用开头反引号()和结尾单引号(')来包裹参数**,这是Sendmail配置宏的标准写法,不能随便改。
另外我还试了用sed处理,发现FreeBSD的sed里八进制转义根本不管用,查了资料说这种情况得用十六进制的xNN转义,但还是没搞明白具体怎么应用到这个场景里。
有没有熟悉FreeBSD下awk/sed转义,或者懂Sendmail m4配置的朋友,能指点下我这个宏里到底还有哪些部分需要转义,才能让awk或sed正确执行插入操作呀?
备注:内容来源于stack exchange,提问作者Utkonos
相关产品推荐
相关产品推荐

