sed执行替换操作,单独执行不存在问题,但是脚本中执行报上述信息:
###手工执行#############
[root@k8s-t01 tmp]# a=88888888
[root@k8s-t01 tmp]# b=ffffffff
[root@k8s-t01 tmp]# sed -i "s/${a}/${b}/g" q1.txt
[root@k8s-t01 tmp]# more q1.txt
xxxxx||yyyyyy||zzzzzz|11111||22222||333||ffffffff||0000000
xxxxx||yyyyyy||zzzzzz|11111||22222||333||ffffffff||0000000
xxxxx||yyyyyy||zzzzzz|11111||22222||333||ffffffff||0000000
xxxxx||yyyyyy||zzzzzz|11111||22222||333||ffffffff||0000000
xxxxx||yyyyyy||zzzzzz|11111||22222||333||ggggggg||0000000
######脚本执行###########
[root@k8s-t01 tmp]# cat q1.txt |while read line
> do
> a=`echo $line|awk -F "|" '{print $12}'`
> echo $a
> b=`grep $a p1.txt |awk '{print $2}'`
> echo $b
> sed -i "s/${a}/${b}/g" q1.txt
> done
88888888
fffffff
88888888
fffffff
88888888
fffffff
88888888
fffffff
ggggggg
ggggggg
sed: -e expression #1, char 0: no previous regular expression
[root@k8s-t01 tmp]# more q1.txt
xxxxx||yyyyyy||zzzzzz|11111||22222||333||fffffff||0000000
xxxxx||yyyyyy||zzzzzz|11111||22222||333||fffffff||0000000
xxxxx||yyyyyy||zzzzzz|11111||22222||333||fffffff||0000000
xxxxx||yyyyyy||zzzzzz|11111||22222||333||fffffff||0000000
xxxxx||yyyyyy||zzzzzz|11111||22222||333||ggggggg||0000000
[root@k8s-t01 tmp]#
看结果也是执行成功了!!!

在Shell脚本中使用sed进行文件内容替换时,出现错误:`sed: -e expression #1, char 0: no previous regular expression`。尽管最终结果似乎正确,但脚本执行过程中报错。错误源于在sed命令中没有提供有效的正则表达式。解决方案可能是确保在使用-s选项之前,正则表达式已经被正确设置。在给定的脚本中,变量`a`和`b`被正确赋值,并用于替换操作,但在循环中多次执行时,可能需要临时文件或-i选项的适当使用来避免错误。
853





