String 文件中复杂的字符串替换
所以,我有一些字符串要在我正在制作的游戏的一些数据文件中替换。我可以使用String 文件中复杂的字符串替换,string,bash,awk,replace,sed,String,Bash,Awk,Replace,Sed,所以,我有一些字符串要在我正在制作的游戏的一些数据文件中替换。我可以使用sed或awk。我需要帮助编写bash脚本来替换它,下面是我要替换的东西的列表。(请记住,我将使用括号中的X来代替数字,同样,对于字符串1和2,在需要替换的字符串后面有一个空格,我也需要替换空格。) 将\\P[x]:的每个实例替换为\\n\\pf[x] 将\\N[x]:的每个实例替换为\\N\\af[x] 将“卷”:80的每个实例替换为“卷”:90 将..的每个实例替换为\\\\\\\\\\\\\\\\\\. 将“]}、{“
sed
或awk
。我需要帮助编写bash脚本来替换它,下面是我要替换的东西的列表。(请记住,我将使用括号中的X来代替数字,同样,对于字符串1和2,在需要替换的字符串后面有一个空格,我也需要替换空格。)
\\P[x]:
的每个实例替换为\\n\\pf[x]
\\N[x]:
的每个实例替换为\\N\\af[x]
“卷”:80的每个实例替换为“卷”:90
..
的每个实例替换为\\\\\\\\\\\\\\\\\\.
“]}、{“code”:401,“indent”:0,“parameters”:[“
替换为“]}、{“code”:401,“indent”:0,“parameters”:[“
”(需要替换的字符串开头有一个空格,我想将其移动到字符串末尾。)sed -e 's/"volume":80/"volume":90/g' -e 's///g' -e 's/\ \"]},{\"code\":401,\"indent\":0,\"parameters\":[\"/\"]},{\"code\":401,\"indent\":0,\"parameters\":[\"\ /g' < ${file} > ${outdir}/${filename}.${extension}
sed-e's/“volume”:80/“volume”:90/g'-e's///g'-e's/\\\”],{\'code\':401,\'indent\':0,\'parameters\':[\'/\'],{\'code\':401,\'indent\':0,\'parameters\:[\'${file}>${outdir}/${filename}.{扩展名}
我得到这个错误:`sed:-e表达式#3,char 109:unterminated s'命令
这是我创建的一个脚本,我不知道如何让它正常工作:
#!/bin/bash
direct=./1
outdir=./2
mkdir -p $direct
mkdir -p $outdir
for file in ${direct}/*.*; do
filepath=$(basename "$file")
extension="${filepath##*.}"
filename="${filepath%.*}"
strb='"volume":80'
strr='"volume":90'
echo 1 && sed -e "s#\"${strb}\"#\"${strr}\"#g" -i ${file}
strb='...'
strr='\\..\\..\\..\\.'
echo 2 && sed -e "s#\"${strb}\"#\"${strr}\"#g" -i ${file}
num=0
while [ "$num" -le "99" ]; do
strb='\\P['"$num"']\: '
strr='\\n<\\P['"$num"']>\\pf['"$num"']'
sed -e "s#\"${strb}\"#\"${strr}\"#g" -i ${file}
strb='\\N['"$num"']\: '
strr='\\n<\\N['"$num"']>\\af['"$num"']'
sed -e "s#\"${strb}\"#\"${strr}\"#g" -i ${file}
num=$(echo $num+1 | bc -l)
done
strb=' "]},{"code":401,"indent":0,"parameters":["'
strr='"]},{"code":401,"indent":0,"parameters":[" '
echo 5 && sed -e "s#\"${strb}\"#\"${strr}\"#g" -i ${file}
strb='Move1'
strr='Move'
echo 6 && sed -e "s#\"${strb}\"#\"${strr}\"#g" -i ${file}
strb='Move'
strr='Move1'
echo 7 && sed -e "s#\"${strb}\"#\"${strr}\"#g" -i ${file}
echo ${filename}.${extension}
done
!/bin/bash
直接=./1
outdir=/2
mkdir-p$direct
mkdir-p$outdir
对于${direct}/*.*中的文件,请执行以下操作
文件路径=$(基本名称“$文件”)
extension=“${filepath##*.}”
filename=“${filepath%.*}”
strb=““体积”:80”
strr=““音量”:90”
echo 1&&sed-e“s${strb}\”${strr}\“{strr}\”g“-i${file}
strb='…'
strr='\\\\\\\\\\\\\\\\\\\\\\\\.'
echo 2&&sed-e“s${strb}\”${strr}\“{strr}\”g“-i${file}
num=0
而[“$num”-le“99”];则
strb='\\P['$num']\:'
strr='\\n\\pf['$num']
sed-e“s#\”${strb}\“${strr}\”\g“-i${file}
strb='\\N['$num']\:'
strr='\\n\\af['$num']
sed-e“s#\”${strb}\“${strr}\”\g“-i${file}
num=$(echo$num+1 | bc-l)
完成
strb='“]},{“代码”:401,“缩进”:0,“参数”:[“'
strr='“]},{“代码”:401,“缩进”:0,“参数”:[“'
echo 5&&sed-e“s#\”${strb}\“${strr}\”g“-i${file}”
strb='Move1'
strr='Move'
echo 6&&sed-e“s#\”${strb}\“${strr}\”g“-i${file}”
strb='Move'
strr='Move1'
echo 7&&sed-e“s#\”${strb}\“${strr}\”\g“-i${file}
echo${filename}.${extension}
完成
在sed的第五个实例中,我得到了
unterminated s'命令
我想在脚本中的sed的第五个实例中得到了unterminated s'命令
,因为你的s'
命令以双引号终止,但是你的$strb
和$strr
字符串也有未替换的双引号引号。这对整个脚本来说是个问题,但幸运的是,第五个实例恰好有奇数个双引号,这导致了语法错误并暴露了问题。因为您的字符串都没有单引号,所以只使用单引号终止sed
,并将所有变量用双引号包装到pres注意他们的文字是安全的,例如
sed -e 's#'"${strb}"'#'"${strr}"'#g' -i ${file}
您的字符串中还有一些[]
和一些
。它们对sed有特殊的意义,因此您应该对它们进行转义(对于模式,而不是替换),例如
改变
strb='...'
到
改变
strb=' "]},{"code":401,"indent":0,"parameters":["'
到
有关对sed
具有特殊意义的字符的详细信息,请参阅。这可能有点乏味,但实际上很简单。您是否查找了sed
的替代命令?这是为了获得编程帮助,而不是要求他人为您编写代码的地方。请使用您尝试过的一些代码改进您的问题,您的input和output示例,以及任何相关的错误消息。@CodeGnome添加了脚本,当你被问到是否查找了sed的替代命令时,你口齿不清地说nope
,这种态度和缺乏努力使很多人拒绝帮助你,因此出现了反对票和接近票。你为什么说你不费心去帮助你当您已经使用它编写了一个脚本时,请查看它?现在可能已经太晚了,但是如果您再次询问您的问题,以包含简明、可测试的示例输入和预期输出,那么我们将有必要的信息来开始尝试帮助您(如果有人还在看这个问题)。
strb=' "]},{"code":401,"indent":0,"parameters":["'
strb=' "\]},{"code":401,"indent":0,"parameters":\["'