var = abc cde fgh ijk
我跑到命令
下面 sed -i '$s/}/,\n"filename":"'$var'/g"}/'
低于错误
sed: -e expression #1, char 32: unterminated `s' command
因为“abc cde fgh ijk”在字符串值之间有空格。
预期输出是打印:abc cde fgh ijk
谢谢
答案 0 :(得分:0)
试试这个 -
$cat f
Hello vipin
$var="abc cde fgh ijk"
$sed "s/Hello/$var/g" f
abc cde fgh ijk vipin
答案 1 :(得分:0)
将$var
更改为"$var"
。否则,var
中的空格对于作为arg分隔符的bash是可见的,从而终止sed“程序”。
答案 2 :(得分:0)
这里有一些问题。首先,是的,这些空格让sed
混乱,因为你没有引用它们。然后,您在g}/
中也有语法错误。替换运算符的语法是:
s/original/replacement/options
例如:
s/foo/bar/g
但你正在使用:
s/foo/bar/g"}/
在任何情况下,除非文件的最后一行有多个}
,否则g
毫无意义。
因此,根据您实际尝试做的事情,您需要其中一个(UI已删除-i
以显示输出,再次添加以使替换修改原始文件):
$ cat file
foo
bar}
$ sed '$s/}/,\n"filename":"'"$var\"\}/" file
foo
bar,
"filename":"abc cde fgh ijk"}
或者
$ cat file
foo
bar}}}
$ sed '$s/}/,\n"filename":"'"$var\"\}/g" file
foo
bar,
"filename":"abc cde fgh ijk"},
"filename":"abc cde fgh ijk"},
"filename":"abc cde fgh ijk"}
当然,更简单的方法是设置var
来保存整个目标替换,引号和所有:
$ cat file
foo
bar}
$ var=',\n"filename":"abc cde fgh ijk"}'
$ sed "\$s/}/$var/" file
foo
bar,
"filename":"abc cde fgh ijk"}
请注意,现在我们使用的是双引号,$
表达式中的sed
需要进行转义。