我正在构建一个 script除其他外,这将用文件夹路径替换 XML 文件中的模式。
我尝试使用的 sed
命令是:
SEDCMD="s|PATHTOEXPORT|$2|"
其中 $2
是包含文件夹路径的命令行参数。
这后来被称为:
sed -e $SEDCMD $FILTER > $TEMPFILTER
但是,在运行该命令时,出现“未终止的‘s’命令”错误。
我该如何解决这个问题?我试过更改用于分隔正则表达式的字符(从 /
到 |
)。我试过(以不同的方式)引用命令行参数。
最佳答案
shell 正在解析 $SEDCMD
的内容。如果您从 shell 脚本(包括 Makefile)中使用它,您应该始终用双引号保护所有扩展变量。双引号将强制变量插值但保护任何 shell 元字符免受进一步解释。
sed -e "$SEDCMD" "$FILTER" > "$TEMPFILTER"
我假设 $FILTER
和 $TEMPFILTER
是文件名?我也引用了它们,以防万一它们包含诸如空格或其他类型的 shell 元字符之类的邪恶内容;很奇怪,是的,但它已经发生了。定期对文件名运行 rename 's/\s+/_/g'
以清除空格,但对于其他文件,您必须采取更谨慎的方法;例如,如何处理星号、问号、括号和括号等。
如果您将 -x
和/或 -v
添加到您的 shell 命令行,您将获得一些跟踪调试,我认为这可能会显示您在哪里在这里出了问题。
关于regex - sed error "unterminated ' s' command”故障排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4070478/