Я не смог воспроизвести это с помощью быстрого теста (используя GNU sed 4.2.1) - но strace показала, что sed создала файл с именем sedJd9Cuy
и затем переименовала его в tmp
(файл с именем командная строка).
Похоже, что-то идет не так после того, как sed создаст временный файл и до того, как сможет переименовать его.
Мое лучшее предположение, что вам не хватает места в файловой системе; Вы можете создать новый пустой файл, но не можете записать в него.
Что говорит df .
?
EDIT
Я до сих пор не знаю, что является причиной проблемы, но не должно быть слишком сложно обойти ее.
Вместо
sed -i 's/string1/string2/g' test.txt
попробуйте что-то вроде этого:
sed 's/string1/string2/g' test.txt > test.txt.$$ && mv -f test.txt.$$ test.txt
Что-то не так с тем, как sed создает, а затем переименовывает текстовый файл, чтобы заменить исходный файл. Приведенная выше команда использует sed в качестве простого фильтра ввода-вывода и создает и переименовывает временный файл отдельно.