使用 sed 用包含变量的新行替换文本行

Dan*_*s W 1 sed text-processing

我正在研究这个解决方案:使用 sed 编辑带有变量的文件中的行并尝试将其应用于我的情况,但我最近才发现sed并且还没有掌握它。

如果我有一个文件/tmp/mary.txt,它看起来像这样:

Mary had a little lamb
with fleece as white as
snow. Everywhere that
Mary went, the lamb was
sure to go.
Run Code Online (Sandbox Code Playgroud)

我想替换此文件中的一行文本,特别是:

Mary had a little lamb -> Mary had 2 little lambs

我用过这个:

sed -i 's/*.had a little lamb.*/Mary had $(nproc) little lambs/' /etc/mary.txt
Run Code Online (Sandbox Code Playgroud)

我使用-i就地s/替代品,它抛出错误:

sed: 1: "mary.txt": extra characters at the end of g command
Run Code Online (Sandbox Code Playgroud)

我想做的另一件事是用结果替换第一行中的“lamb”一词 echo $PATH

sed -i 's/*.had a little lamb.*/ Mary had a little '$(echo $PATH)'/' /etc/mary.txt
Run Code Online (Sandbox Code Playgroud)

这会引发与上述相同的错误。我知道这是两种不同的场景,但是可以向我展示我做错了什么,以便我将来可以使用它。

fed*_*qui 5

使用双引号正确评估 var:

$ var=43
$ sed "s/.*had a little lamb.*/Mary had $var little lambs/" file
Mary had 43 little lambs
with fleece as white as
snow. Everywhere that
Mary went, the lamb was
sure to go.
Run Code Online (Sandbox Code Playgroud)

请参阅Jacob Minshall.*代替的回答*.sed命令是我从头开始写的,所以没有注意到原代码中的错误。