2015-11-04 3 views
0

Я запускаю следующую команду sed команду заменить что-то в XML-файле.sed: команда искажена в SunOS

sed -e '/<AddName>/{ s;<AddName>;<ModifyName>;}' ${modified_name_file} > ${RESOURCES}/tempfile2.xml

Это прекрасно работает в Linux, но не в Solaris с последующей ошибкой.

sed: command garbled: /<AddName>/{ s;<AddName>;<ModifyName>;}

я с трудом, чтобы понять это. Есть ли другой способ сделать это в SunOS?

+1

Вы можете попробовать использовать "обычный" 's' синтаксис:' s///'? Возможно, что использование других букв - расширение GNU, а пользовательское пространство SunOS, как известно, очень строго POSIX. –

+0

Скобки не нужны. Мое подозрение в том, что Solaris хочет, чтобы между лексемами была новая строка, но если вы исправите синтаксис, чтобы они не были нужны, код также должен быть более переносимым. Просто 'sed 's// /' file' не будет изменять строки, которые не содержат совпадения в регулярном выражении' '. – tripleee

ответ

1

Использование:

sed '/<AddName>/{ s/<AddName>/<ModifyName>/;}' ${modified_name_file} > ${RESOURCES}/tempfile2.xml 
+1

'sed' запоминает последний матч и повторно использует его, если у вас есть пустая совпадение, поэтому' sed '/ /s // /' 'выполнит то же самое; но, конечно, нет необходимости специально проверять соответствие перед заменой. См. Мой другой комментарий выше. – tripleee