加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

sed:之前没有正则表达式

发布时间:2020-12-14 00:29:15 所属栏目:Linux 来源:网络整理
导读:我正在尝试在脚本中运行以下表达式来查找设备并在html文件中更改与设备关联的字段之一. sed -e "s/$OLDTEST/$TESTING/" -e "s/$CURRENTVALU/$NEWSTATUS---$DATE/" -e "s/$PASSORFAIL/$PASSORFAILNEW/" -e "s/$BGCOLOR/$BGCOLORNEW/$POSITION" -e "s/$OLDNOTE
我正在尝试在脚本中运行以下表达式来查找设备并在html文件中更改与设备关联的字段之一.

sed -e "s/$OLDTEST/$TESTING/" -e "s/$CURRENTVALU/$NEWSTATUS---$DATE/" -e "s/$PASSORFAIL/$PASSORFAILNEW/" -e "s/$BGCOLOR/$BGCOLORNEW/$POSITION"  -e "s/$OLDNOTE/$NOTE/"  >> //sysadm/shared/file.tmp

我似乎继续得到一个“没有以前的正则表达式”.有任何想法吗?

调试日志输出:

sed -e s//Yes/ -e s//Resolved---03-25-13/ -e s//Pass/ -e s//#348017/1 -e s///

sed: -e expression #5,char 0: no previous regular expression

谢谢,
戴夫

解决方法

您的调试日志告诉您整个故事;-)

sed -e s//Yes/ -e s//Resolved---03-25-13/ -e s//Pass/ -e s//#348017/1 -e s///
 #------^-- empty regular expression

因此错误消息“没有先前的正则表达式”.

不清楚您的体验,因此有2种解决方案.回想一下,在基于unix / linux的shell中,dbl-quotes中的字符串将被评估变量替换,并且你的代码“s / $OLDTEST / $TESTING /”看起来像一个需要变量替换的字符串.

你可能需要这样做

export OLDTEST="something old"
export TESTING="something new"

使代码工作.

如果你真的想要用文字字符串’$TESTING’代替文字字符串’$OLDTEST’,那么你必须“隐藏”来自shell处理的变量.我们通过使用单引号字符在unix / linux中这样做那么你的命令就是

sed 's/$OLDTEST/$TESTING/
     s/$CURRENTVALU/$NEWSTATUS---$DATE/
     s/$PASSORFAIL/$PASSORFAILNEW/
     s/$BGCOLOR/$BGCOLORNEW/$POSITION
     s/$OLDNOTE/$NOTE/"  >> //sysadm/shared/file.tmp

但是..我在这里看不到输入文件.

所以真的

sed 's/ ...../..../ ; s/../..../; etc; s/.../../' inputFile >> //sysadm/shared/file.tmp

你可能真的不想附加到tmp扩展名的现有文件,所以…

sed 's/ ...../..../ ; s/../..../; etc; s/.../../' inputFile > //sysadm/shared/file.tmp
#-----------------------------------------------only one > -^-------

使用>>意味着您的测试增强了您的sed脚本,您将每次运行的结果附加到同一个文件中.你最终会得到很多重复的信息.

我使用了sed速记,省略了-e选项.如我在此处所示,Sed可以将整组cmd作为一个参数处理.您也可以将所有这些命令放入一个单独的文件中,然后调用它

sed -f fixer.sed inputFile > //sysadmin/shared/file.tmp

最后,如果您的sed支持-i选项,您可以“内联”您的更改,只需拥有

sed -i -f fixer.sed inputFile

并且sed将使用更改覆盖旧文件.我建议不要这样做,直到你确定所有改变你的尝试工作并且不会导致任何意想不到的后果.一旦你的原始文件消失了,就没有回复,所以保存到.tmp就像你正在做的那样是一个很好的安全带:-)

IHTH

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读