gpt4 book ai didi

sed - sed:没有以前的正则表达式

转载 作者:行者123 更新时间:2023-12-04 18:10:23 31 4
gpt4 key购买 nike

我正在尝试在脚本中运行以下表达式以查找设备并在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


因此,错误消息 "no previous regular expression".

不清楚您的经历,因此有两种解决方案。回想一下,在基于unix / linux的shell中,将评估dbl引号内的字符串以进行变量替换,并且您的代码 "s/$OLDTEST/$TESTING/"看起来像需要变量替换的字符串。

您可能需要做

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


该代码才能正常工作。

如果您确实希望将文字字符串'$ OLDTEST'替换为文字字符串'$ TESTING',则必须“隐藏” shell处理中的变量,我们在unix / linux中通过使用单引号chars来实现。 。,那么您的命令将是

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是一个很好的安全带:-)

高温超导

关于sed - sed:没有以前的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15623520/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com