无法理解 sed 命令的行为

无法理解 sed 命令的行为

我有一个包含一些数据的文件 test,我使用sed命令修改文件中的某些单词,然后将输出重定向到同一个文件,但执行命令后文件不包含任何数据。我不明白这种行为背后的原因?

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

答案1

使用同一个文件作为输入和输出并不是最佳实践。shell (bash) 在 sed 读取文件之前打开并截断(命令中的 >)文件。

这才sed 's/foo/bar/' test > test.out是正确的做法。

答案2

sed -i 's/foo/bar/g' test

将 替换foo并将bar更改写入test

$ cat test
bar
bar
123
bar
bar
bar

相关内容