我有一个包含一些数据的文件 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