你的调试日志告诉你整个故事;-)
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".
不清楚你的经验,所以有2个解决方案。回想一下,在基于 unix/linux 的 shell 中,将评估 dbl-quotes 内的字符串以进行变量替换,并且您的代码"s/$OLDTEST/$TESTING/"
看起来像需要变量替换的字符串。
你可能需要做
export OLDTEST="something old"
export TESTING="something new"
使该代码正常工作。
如果您真的希望将文字字符串 '$OLDTEST' 替换为文字字符串 '$TESTING',那么您必须从 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