在我的项目.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
不过,这是可能的你需要转义一些字符。