无法理解 sed 命令的行为

Pan*_*dey 2 command-line redirect sed

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

$ cat test
foo
bar
123
bar
foo
foo
$ sed 's/foo/bar/' test > test
$ cat test
$
Run Code Online (Sandbox Code Playgroud)

Sor*_*n A 5

使用相同的文件作为输入和输出并不是最佳做法。发生的情况是 shell (bash) 在 sed 读取文件之前打开并截断(命令中的 >)文件。

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

  • 或者`sed -i -e 's/foo/bar'` 进行就地编辑。 (4认同)