На этот вопрос уже есть ответ здесь:
У меня есть тест файла с некоторыми данными, и я использую sed
, чтобы изменить какое-то слово в файле, а затем перенаправить вывод в тот же файл, но после выполнения команды файл не содержит данных. Я не понимаю причины такого поведения?
$ cat test
foo
bar
123
bar
foo
foo
$ sed 's/foo/bar/' test > test
$ cat test
$
Это не лучшая практика для использования того же файла в качестве обоих вводов и выводов. То, что происходит, - то, что оболочка (удар) открывается и усеченный (> в Вашей команде), файл прежде sed читает его.
Так sed 's/foo/bar/' test > test.out
был бы правильный способ сделать его.
sed -i 's/foo/bar/g' test
Будет замены foo
с bar
и писать изменения в test
.
$ cat test
bar
bar
123
bar
bar
bar