У меня есть файл test_output_archive.svd с некоторыми знаками доллара ( $
). Я сгенерировал скрипт оболочки Replace_dollar_pound.sh с командой cat для замены символа доллара на фунт ( £
) скрипт работает в Solaris 10, доллар заменяется, как и ожидалось. В Solaris 11, но доллар не заменяется, не выдает никаких ошибок
Содержимое test_output_archive.svd: Аренда линии $9 OOB всего за $10
Заменить символ доллара на фунт на шаге 1, удалить ненужные символы на шаге 2, удалить временный файл на шаге 3, переименовать на шаге 4**
Содержимое Replace_dollar_pound.sh: cat тестовый_архив_вывода.svd | tr "\044" "\243" > временный_архив.svd cat временный_архив.svd | tr -d "\302" > тестовый_архив_вывода2.svd rm временный_архив.svd mv тестовый_архив_вывода2.svd тестовый_архив_вывода.svd
Какие изменения необходимо внести при обновлении ОС до Solaris 11?
решение1
Имеет $
особое значение в регулярных выражениях, оно означает "конец записи" (запись==строка в большинстве случаев). Поэтому вам нужно экранировать его. Попробуйте это:
sed 's/\$/£/g' file > outfile
решение2
Вы можете экранировать специальный символ ($) в команде sed.
$ cat test.txt
£ pound £
$ dollar $
£ pound £
$ dollar $
$ sed 's/\$/£/g' test.txt
£ pound £
£ dollar £
£ pound £
£ dollar £
Или альтернативно
$ sed 's/[$]/£/g' test.txt
£ pound £
£ dollar £
£ pound £
£ dollar £
решение3
Вы можете использовать sed
для замены каждого вхождения строки, как описаноздесь:
sed -i 's/\£/\$/g' FILENAME
Параметр -i
указывает sed
на необходимость работы с файлом, s
— оператор для замены строк, \£
— строка, которую необходимо заменить, \$
— строка, которая заменяет каждый $
символ ( \
знаки экранируются, так как они являются специальными символами) и g
означает замену всех вхождений.
РЕДАКТИРОВАТЬ:эта -i
опция не работает на Solaris, вам следует использоватьэтотобходной путь.