我有一个有几行的文件。
one
two
three
four
five
我需要添加我正在处理的服务器的主机名作为文件的第一行。例如,如果 abcd555.india.com 是服务器,则输出文件应如下所示:
abcd555.india.com
one
two
three
four
five
希望我的问题很清楚!我将感谢任何在这个需要帮助的时刻帮助我的人。
答案1
使用vi
命令
:0r !hostname
或者,以更长的形式,
:0read !hostname
Esc当然,你必须先按。
该read
命令通常采用文件名并将该文件的内容插入到当前行下方,但如果您在!
其前面指定 shell 命令,它将采用该命令的输出并插入那在当前行下方。
然而,我们不只是想将其插入到任何地方。我们想把它插入到第一的线。这就是为什么我们说0r
。零指定行号,命令输出(或文件)将放置在该行号之后。
答案2
这可以使用吗sed
?
这里假设 GNU sed
:
sed -i '1 i\'"$HOSTNAME" file
将其与名为 test1 的文件一起使用会产生:
$ cat test1
one
two
three
four
five
然后:
$ sed -i '1 i\'"$HOSTNAME" test1
导致:
$ cat test1
chris-dell
one
two
three
four
five
答案3
以编程方式执行此操作的最简单方法是写入临时文件,然后覆盖现有文件:
{ hostname; cat somefile; } > somefile.tmp &&
mv somefile.tmp somefile
答案4
您已标记vi
,但听起来您正在寻找 CLI 选项。在其中时,vi
您可以使用shift + O
上面的插入并自动添加新行,然后将您的行直接粘贴到其中。如果您不想使用编辑器,您可以使用sed
(这里假设是 GNU 实现)。
sudo sed -i '1iabcd555.india.com' /etc/hosts