sed错误“unterminated's'命令”故障排除

时间:2010-11-01 15:48:21

标签: regex debugging shell sed

我正在构建一个script,除其他外,它将用文件夹路径替换XML文件中的模式。

我尝试使用的sed命令是:

SEDCMD="s|PATHTOEXPORT|$2|"

其中$2是包含文件夹路径的命令行参数。

后来称之为:

sed -e $SEDCMD $FILTER > $TEMPFILTER

但是,在运行命令时,我收到“未终止''命令”错误。

我该如何解决这个问题?我尝试更改用于分隔正则表达式的字符(从/|)。我尝试引用(以不同的方式)命令行参数。

1 个答案:

答案 0 :(得分:5)

shell正在查看解析$SEDCMD的内容。如果您从shell脚本(包括Makefile)中使用它,则应始终使用双引号保护所有扩展变量。双引号将强制进行变量插值,但保护任何shell元字符不被进一步解释。

sed -e "$SEDCMD" "$FILTER" > "$TEMPFILTER"

我认为$FILTER$TEMPFILTER是文件名?我也引用了它们,以防它们包含空白或其他类型的元字符等邪恶的东西;奇怪的,是的,但它已经知道会发生。定期运行rename 's/\s+/_/g'文件名以清除空白,但对于其他人,你必须采取更谨慎的方法;例如,如何处理星星与问号与括号和parens等等。

如果你将-x和/或-v添加到你的shell命令行,你会得到一些跟踪调试,我认为这可能会显示你在这里出错的地方。