我在脚本中尝试了以下命令并收到错误,
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
。然后它删除旧行。