【发布时间】:2020-03-17 03:03:50
【问题描述】:
我在 Ubuntu 上使用sed 命令来替换内容。
这个初始命令来自here。
sed -i '$ s/$/ /replacement/' "$DIR./result/doc.md"
但是,如您所见,我在替换部分中有一个斜线。斜杠导致命令抛出:
sed: -e expression #1, char 9: `s' 的未知选项
此外,我的替换存储在一个变量中。
因此,由于斜线,以下 将不起作用:
sed -i "$ s/$/ $1/" "$DIR./result/doc.md"
如here and in duplicate 所述,我应该使用另一个分隔符。如果我尝试使用@:
sed -i "$ s@$@ $1@" "$DIR./result/doc.md"
它给出了错误:
sed: -e expression #1, char 42: unterminated `s' command
我的问题是:
如何在此命令中使用变量以及 / 以外的其他分隔符?
【问题讨论】:
-
$@在 bash 中有一个含义。使用其他东西作为分隔符,或使用例如Perl 带有实变量而不是 shell 的宏扩展。 -
您刚刚选择了错误的分隔符。
@是一个 shell 参数,所以双引号内的$@被扩展。使用单引号和双引号字符串的组合构建sed脚本,或选择不同的分隔符。但请记住,如果不格外小心,$1的任何值都可能破坏脚本。 -
_也是一个shell参数:)试试|。 -
您也可以在脚本中转义
$,以避免意外的参数扩展,无论您选择何种分隔符:例如"\$ s@\$@ $1@"。