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

标签 sed

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

相关文章:

regex - 我可以只对我通过的名称使用 find 进行可写性测试,而无需递归吗?

linux - 在 linux 中使用 sed 就地编辑替换包含特定字符串的行下方的特定行

Linux:使用 sed 替换文本文件中制表符分隔行的值

bash - Bash 中大型定长文本文件的高效子字符串解析

c - 在 Makefile 依赖项中强制执行命令

linux - sed:在文件中的一行之前插入一个带有反斜杠和换行符的宏

linux - 如何使用 sed 或 awk 正则表达式在 linux shell 中解析此数据

regex - 使用可变行号从文件中删除一行

unix - 删除unix中特定列中的最后一个字符

linux - 使用 sed 每第 n 行删除换行符