sed:-e expression#1 char 48:未终止的“s”命令

sed:-e expression#1 char 48:未终止的“s”命令

在我的项目.sh文件中我写了这个命令:

var1=`sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/\\n/g;s/^/"/g;s/$/"/g' ${var}`
sed -i "s/%PQR%/$var1/g" file2

var是存储我要更新的文件位置的变量。我想在文件的开头和结尾添加双引号。我还希望所有新行都替换为\n.例子:

To err is to human.
This is life.

输出:

"To err is to human.\nThis is life."

然后我想将%PQR%infile2替换为var1.

但是在运行管道时,第二个命令出现错误,如标题中所述:

sed: -e expression#1 char 48: unterminated `s' command

答案1

要将文件的内容编码为一个 json 字符串,请使用

json=$(jq --slurp -R < "$file")

或者:

json=$(jq --slurp -R 'rtrimstr("\n")' < "$file")

修剪分隔最后一行的换行符。

并且用任意数据替换某些占位符,使用起来要容易得多perl-i某些sed实现支持的选项实际上是受 启发的perl)。

PLACEHOLDER='%PQR%' REPLACEMENT="$json" perl -pi -e '
  s/\Q$ENV{PLACEHOLDER}\E/$ENV{REPLACEMENT}/g' -- "$other_file"

sed不过,这是可能的你需要转义一些字符

相关内容