sed:-e表达式#1,char 7:未终止的`s'命令

时间:2014-08-30 03:23:38

标签: awk sed

port.properties
{
  "port":3006
  "name":"John"
}

changeport.sh

filename="port.properties"
oldport=$(awk -F'"port":|,' '{i=$2;print i}'  "$filename")
read newport
oldport_str="\"port\":$oldport"
newport_str="\"port\":$newport"

sed -i "s/$oldport_str/$newport_str/g" "$filename"

我不知道错误。如果你有答案,请告诉我,谢谢

2 个答案:

答案 0 :(得分:1)

旧价值中的某些东西是关闭的;它包含一个不可见的字符(DOS回车?)或者你没有向我们展示的东西。

无论如何,使用正则表达式找到旧值只是为了你可以替换它并不能防止任何意外,所以最简单的解决方法是删除读取旧值的部分。

read newport
sed -i "s/\(\"port\":\).*/\1$newport/" port.properties

在捕获括号之前,某些sed方言不需要反斜杠;在提交任何内容之前,请尝试使用您的版本的精确语法。

答案 1 :(得分:1)

只需将整个事情改为简单:

filename="port.properties"
read -r newport
awk -v new="$newport" 'BEGIN{FS=OFS=":"} $1~/"port"/{$2=new} 1' "$filename" > tmp &&
mv tmp "$filename"

无论您的文件中包含哪些字符或读取输入字符串,上述内容都将有效。