Не могу понять поведение команды sed

У меня есть файл теста с некоторыми данными, и я использую sed Команда изменить какое-либо слово в файле, а затем перенаправить вывод в тот же файл, но после выполнения команды файл не содержит данных. Я не понимаю причину этого поведения?

$ cat test
foo
bar
123
bar
foo
foo
$ sed 's/foo/bar/' test > test
$ cat test
$

2 ответа

Не рекомендуется использовать один и тот же файл для ввода и вывода. Что происходит, так это то, что оболочка (bash) открывает и усекает (> в вашей команде) файл до того, как 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
Другие вопросы по тегам