Не могу понять поведение команды 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