在 Linux 的特定位置添加一行并输出到同一个文件?

ziu*_*fer 3 linux bash sed

如何在 file.txt 中添加第三行:

             line 1
             line 2
             line 4
Run Code Online (Sandbox Code Playgroud)

sed 可以做,sed '3iline 3' file.txt但我想输出到同一个文件。我尝试过sed '3iline 3' file.txt >> file.txt哪个不起作用。它确实添加了该行,但它重复了 file.txt,我得到了这个:

       line 1
       line 2
       line 4
       line 1
       line 2
       line 3
       line 4
Run Code Online (Sandbox Code Playgroud)

che*_*ner 7

执行此操作的唯一方法是写入第二个文件,然后替换原始文件。您只能附加到任意文件;您不能插入其中之一。

t=$(mktemp)
sed '3iline 3' file.txt > "$t" && mv "$t" file.txt
Run Code Online (Sandbox Code Playgroud)

如果您的版本sed支持它,您可以使用该-i选项来自动处理临时文件。

sed -i '3iline 3' file.txt  # GNU
sed -i "" '3iline 3 ' file.txt  # BSD sed requires an argument for -i
Run Code Online (Sandbox Code Playgroud)