我正在使用sed进行带有shell脚本的自动安装程序。我想在最后一次引用之前添加一个单词,规则是:
文件:
values="word anotherword anyword foo"
剧本:
#!/bin/sh
wordtoadd="bar";
sed -i "s/^values=\(*.\)\"/\1$wordtoadd\"/" filetomodify.txt;
期望的结果:
values="word anotherword anyword foo bar"
答案 0 :(得分:1)
一种方式:
sed '/^values=/s/\([^"]*\)"$/\1 '"$wordtoadd"'"/' input
如果找到以values=
开头的行,则替换一系列非引号字符([^"]
)的最长匹配,后跟引号和行尾({{ 1}})匹配和"$
,同时放回引号(wordtoend
)。
在您的sed表达式中,\1 '"$wordtoadd"'"
应该\(*.\)
来量化\(.*\)
。你也应该在替换时放回.
部分。
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed -r 's/(.*)"/\1'"$wordtoadd"'"/' file