Awk sed:-e表达式#1,字符7:unterminated`s';命令

Awk sed:-e表达式#1,字符7:unterminated`s';命令,awk,sed,Awk,Sed,changeport.sh port.properties { "port":3006 "name":"John" } 我不知道这个错误。如果您有答案,请告诉我,谢谢。旧值中的某些内容已关闭;它包含一个不可见的字符(DOS回车?)或您没有向我们显示的内容 无论如何,使用正则表达式查找旧值只是为了替换它并不能防止任何事故,因此最简单的修复方法是删除读取旧值的部分 filename="port.properties" oldport=$(awk -F'"port":|,' '{i=$2;p

changeport.sh

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

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

旧值中的某些内容已关闭;它包含一个不可见的字符(DOS回车?)或您没有向我们显示的内容

无论如何,使用正则表达式查找旧值只是为了替换它并不能防止任何事故,因此最简单的修复方法是删除读取旧值的部分

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"

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

只需将整个内容更改为一个简单的:

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

无论文件中有什么字符或读取输入字符串,上述操作都有效。

在第1行的第7个字符中,“s”命令未终止。我甚至不懂这种语言,但错误信息是不言自明的。我敢打赌,只要几秒钟的努力,我就能解决语法问题。你试过了吗?我想这是因为变量中有引号。问题是“old port”是从port.properties读取的变量,如果我只是在脚本中设置“old port”值或通过命令输入,那是对的。它们有什么不同吗?
|,
您的Awk脚本的
-F
参数的一部分表明,可能您并没有真正向我们精确显示输入文件的样子。如果实际情况不同,显然您必须调整解决方案。
filename="port.properties"
read -r newport
awk -v new="$newport" 'BEGIN{FS=OFS=":"} $1~/"port"/{$2=new} 1' "$filename" > tmp &&
mv tmp "$filename"