我的 sed 命令抛出错误 sed: -e expression #1, char 22: Unknown option to `s'

我的 sed 命令抛出错误 sed: -e expression #1, char 22: Unknown option to `s'

我在脚本中尝试了以下命令并收到错误,

sed -i -e 's/\(dataTable\)/$replace \1/' file.txt

错误信息,

sed: -e expression #1, char 22: unknown option to `s'

请帮助我纠正命令以避免错误。

谢谢!

答案1

我假设你是实际上在表达式周围使用双引号sed而不是单引号,否则您不会收到该错误。

我还假设您在值中使用$replace包含斜杠 ( /) 的字符串。当变量被扩展时,它的值被注入到sed语句中,并且由于它包含斜杠,它破坏了s///命令的语法。

您可以通过将命令中使用的分隔符更改sed为 中不存在的其他字符来解决此问题$replace

@例如,如果您选择

sed -i -e 's@\(dataTable\)@'"$replace"' \1@' file.txt

请注意,您仍然会遇到问题,即您的$replace字符串包含子字符串\x(其中x是任何数字)或&(将被与表达式匹配的字符串部分替换)。您必须转义这些特殊字符串。

参见例如

作为一种特殊情况,如果您计划用新的(静态)内容替换整行,您可以按如下方式执行:

printf '%s\n' "$replace" | sed -e '/some pattern/{ r /dev/stdin' -e 'd; }' file.txt

这会找到匹配的行/some pattern/,然后从标准输入(来自 )读取替换文本printf。然后它删除旧行。

相关内容