问题描述
我想在现有文件的顶部插入文本。我怎样才能做到这一点。我尝试了 echo
和 tee
但没有成功。
我试图从终端在 sources.list
文件的顶部插入 repo 行。
说明
我需要一个单行快速解决方案,因为我已经知道另一个答案的方法
最佳回答
使用 sed
实际上很容易:
-
sed -i -e '1iHere is my new top line\' filename
-
1i
告诉 sed 在文件的第 1 行插入后面的文本;不要忘记末尾的\
换行符,以便将现有的第 1 行移动到第 2 行。
次佳回答
一般来说,使用脚本进行现场编辑很棘手,但您可以使用 echo
和 cat
然后使用 mv
echo "fred" > fred.txt
cat fred.txt t.txt >new.t.txt
# now the file new.t.txt has a new line "fred" at the top of it
cat new.t.txt
# can now do the rename/move
mv new.t.txt t.txt
但是,如果您正在使用 sources.list,您需要添加一些验证和 bullet-proofing 以检测错误等,因为您真的不想丢失它。但这是一个单独的问题:-)
第三种回答
./prepend.sh "myString" ./myfile.txt
已知 prepend
是 my custom shell :
#!/bin/sh
#add Line at the top of File
# @author Abdennour TOUMI
if [ -e $2 ]; then
sed -i -e '1i$1\' $2
fi
也使用相对路径或绝对路径,它应该可以正常工作:
./prepend.sh "my New Line at Top" ../Documents/myfile.txt
更新 :
如果你想要一个永久的脚本,打开 nano /etc/bash.bashrc
然后在文件末尾添加这个函数:
function prepend(){
# @author Abdennour TOUMI
if [ -e $2 ]; then
sed -i -e '1i$1\' $2
fi
}
重新打开您的终端并享受:
prepend "another line at top" /path/to/my/file.txt
第四种回答
为什么不使用真正的文本编辑器呢? ed 是标准的文本编辑器。
ed -s filename <<< $'1i\nFIRST LINE HERE\n.\nwq'
或者,如果您希望命令更具可读性:
ed -s filename < <(printf '%s\n' 1i "FIRST LINE" . wq)
-
1
: 转到第一行 -
i
: 插入模式 -
你要插入的东西…
-
.
: 停止插入,回到正常模式 -
wq
: 写完退出,谢谢,再见。
第五种回答
总是有 awk
选项。用您的内容替换 string
变量。但这不是就地更改。就个人而言,我倾向于不进行就地更改。这绝对是个人喜好。两件事, -v
表示 awk 中的变量,变量 n
在这里用于匹配行号,有效地 NR == 1
。您可以通过更改 n
和 s
的值以多种方式使用它。
string="My New first line"; awk -v n=1 -v s="$string" 'NR == n {print s} {print}' file.source > file.target
例子:
% cat file.source
First Line
Second Line
Third Line
% string="Updated First Line"; awk -v n=1 -v s="$string" 'NR == n {print s} {print}' file.source > file.target; cat ./file.target !698
Updated First Line
First Line
Second Line
Third Line