代码之家  ›  专栏  ›  技术社区  ›  warren

SED错误“未终止的‘S’命令”故障排除

  •  3
  • warren  · 技术社区  · 15 年前

    我在A楼 script 除其他外,这将用文件夹路径替换XML文件中的模式。

    这个 sed 我尝试使用的命令是:

    SEDCMD="s|PATHTOEXPORT|$2|"
    

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

    这后来被称为:

    sed -e $SEDCMD $FILTER > $TEMPFILTER
    

    但是,在运行该命令时,我会收到一个“unterminated's'command”错误。

    我怎么能避开这个?我试图改变用来分隔regex的字符 / | )我尝试过用不同的方式引用命令行参数。

    1 回复  |  直到 15 年前
        1
  •  5
  •   tchrist    15 年前

    shell正在分析 $SEDCMD . 如果您是从shell脚本(包括makefile)使用该脚本,则应始终使用双引号保护所有扩展变量。双引号将强制变量插值,但保护任何shell元字符不受进一步解释的影响。

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

    我想 $FILTER $TEMPFILTER 是文件名吗?我也引用了它们,以防万一它们包含了诸如空格或其他类型的shell元字符之类的邪恶内容;奇怪,是的,但这是众所周知的。定期跑步 rename 's/\s+/_/g' 对于文件名,要清除其中的空白,但对于其他文件名,您必须采取更仔细的方法;例如,如何处理星号、问号、括号和括号等。

    如果你加上 -x 和/或 -v 对于shell命令行,您将得到一些跟踪调试,我认为这可能显示了您在这里哪里出错。

    推荐文章