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

war*_*ren 3 regex debugging shell sed

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

sed我试图使用的命令是:

SEDCMD="s|PATHTOEXPORT|$2|"
Run Code Online (Sandbox Code Playgroud)

$2命令行参数在哪里,其中包含文件夹路径.

这后来被称为:

sed -e $SEDCMD $FILTER > $TEMPFILTER
Run Code Online (Sandbox Code Playgroud)

但是,在运行命令时,我收到"未终止'的'命令'错误.

我怎么能绕过这个?我试着改变使用正则表达式分隔字符(/|).我尝试引用(以不同的方式)命令行参数.

tch*_*ist 5

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

sed -e "$SEDCMD" "$FILTER" > "$TEMPFILTER"
Run Code Online (Sandbox Code Playgroud)

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

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