В Linux sed -i изменит входные файлы на месте. Однако он не работает на Solaris.
sed -i '$ s/OLD/NEW/g' test
sed: illegal option -- i
Что я могу использовать вместо sed -i в Solaris?
Ответ 1
Вам нужно будет реплицировать поведение -i, сохраняя результаты в временном файле, а затем заменяя исходный файл временным файлом. Это может показаться неэлегантным, но все sed -i делает под обложками.
sed '$ s/OLD/NEW/g' test > test.tmp && cat test.tmp > test && rm test.tmp
Если вам все равно, вы можете сделать его более надежным, используя mktemp:
tmp=$(mktemp test.XXXXXX)
sed '$ s/OLD/NEW/g' test > "$tmp" && cat "$tmp" > test && rm "$tmp"
Ответ 2
Это не совсем то же самое, что и sed -i, но у меня была аналогичная проблема. Вы можете сделать это с помощью perl:
perl -pi -e 's/find/replace/g' file
выполнение копирования/перемещения работает только для отдельных файлов. если вы хотите заменить какой-либо текст на каждый файл в каталоге и подкаталогах, вам нужно что-то, что делает его на месте. вы можете сделать это с помощью perl и найти: