Ваш журнал отладки рассказывает вам всю историю ;-)
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 строки внутри dbl-кавычек будут оцениваться на предмет замены переменных, и что ваш код "s/$OLDTEST/$TESTING/"
выглядит как строка, требующая замены переменных.
Вам может понадобиться сделать
export OLDTEST="something old"
export TESTING="something new"
чтобы этот код работал.
Если вы действительно хотите, чтобы литеральная строка '$OLDTEST' была заменена литеральной строкой '$TESTING', вам нужно скрыть переменные от обработки оболочки. Мы делаем это в 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 может обрабатывать целую группу команд как один аргумент, как показано здесь. Вы также можете поместить все эти команды в отдельный файл, а затем вызвать его как
sed -f fixer.sed inputFile > //sysadmin/shared/file.tmp
И, наконец, если ваш sed
поддерживает опцию -i
, вы можете «встроить» свои изменения и просто
sed -i -f fixer.sed inputFile
И sed перезапишет старый файл с изменениями. Я бы рекомендовал не делать этого, пока вы не будете уверены, что все меняет вашу работу и не вызывает непредвиденных последствий. Как только ваш исходный файл исчезнет, его уже не вернуть, поэтому сохранение в .tmp, как вы делаете, — это хороший ремень безопасности :-)
IHTH
25.03.2013
export
, но вам определенно нужен либоOLDTEST="xyz"
, либо что-то в вашем цикле while, напримерecho "$LINE" | while read OLDTEST var2 .... rest
; делать .... ; сделано` . Нам было бы намного проще ответить, если бы весь ваш код был в основном вопросе. Подумайте о редактировании. Используйте инструмент редактирования {} в левом верхнем углу поля редактирования, чтобы отформатировать код. Удачи. 26.03.2013