Shell 在最后一次出现双引号之前添加一个单词

Shell 在最后一次出现双引号之前添加一个单词,shell,sed,Shell,Sed,我正在使用sed来自动安装带有shell脚本的程序。我想在最后一句话之前加上一个词,规则如下: 由于变量的原因,第一个参数中必须有双引号 最后一句话之前的单词是未知的 我更喜欢使用sed命令的解决方案 文件: values="word anotherword anyword foo" 剧本: #!/bin/sh wordtoadd="bar"; sed -i "s/^values=\(*.\)\"/\1$wordtoadd\"/" filetomodify.txt; 预期结果: valu

我正在使用sed来自动安装带有shell脚本的程序。我想在最后一句话之前加上一个词,规则如下:

  • 由于变量的原因,第一个参数中必须有双引号
  • 最后一句话之前的单词是未知的
  • 我更喜欢使用sed命令的解决方案
文件:

values="word anotherword anyword foo"
剧本:

#!/bin/sh
wordtoadd="bar";
sed -i "s/^values=\(*.\)\"/\1$wordtoadd\"/" filetomodify.txt;
预期结果:

values="word anotherword anyword foo bar"
单向:

sed '/^values=/s/\([^"]*\)"$/\1 '"$wordtoadd"'"/' input
如果找到以
值=
开头的行,则会将一系列非引号字符(
[^”]
)的最长匹配替换为引号,并将行尾(
“$
)替换为匹配项和
wordtoend
,同时将引号(
\1'$wordtoadd“
)放回原处

在sed表达式中,
\(*。\)
应为
\(.*)
以量化
。替换时还应放回
值=
部分。

这可能对您有效(GNU sed):


ty,我用您的建议修复了我的sed命令:),效果很好,可以更好地解释您的命令语法吗?特别是($和[^”]*)。@Lyoneel补充了一些解释。
sed -r 's/(.*)"/\1'"$wordtoadd"'"/' file