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

时间:2013-07-08 00:38:47

标签: shell sed

我正在使用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"

2 个答案:

答案 0 :(得分:1)

一种方式:

sed '/^values=/s/\([^"]*\)"$/\1 '"$wordtoadd"'"/' input

如果找到以values=开头的行,则替换一系列非引号字符([^"])的最长匹配,后跟引号和行尾({{ 1}})匹配和"$,同时放回引号(wordtoend)。

在您的sed表达式中,\1 '"$wordtoadd"'"应该\(*.\)来量化\(.*\)。你也应该在替换时放回.部分。

答案 1 :(得分:0)

这可能适合你(GNU sed):

sed -r 's/(.*)"/\1'"$wordtoadd"'"/' file