regex - sed error "unterminated ' s' command”故障排除

标签 regex debugging shell sed

我正在构建一个 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/

相关文章:

javascript - 替换非字母数字和多个空格

ios - 捕获 iOS 应用程序中的调试信息

debugging - 例如,Xcode 6 调试器显示 "0 objects"(即使已实现描述)

javascript - 用于捕获第一个父级的子级属性值的正则表达式

php - 从字符串中检索完整的电子邮件地址

C# 正则表达式从输入中提取组

java - 如何从tomcat自动获取线程转储

php - 如何在 PHP 中获取有用的错误消息?

perl - Shell脚本中字符的小写到大写

linux - 如何将可变参数与 wpa_passphrase 一起使用?