Host localhost
ForwardAgent yes
格式。 我知道您可以执行以下操作:
cat temp.txt >> data.txt
但是,由于它有两行,所以看起来很奇怪。有没有办法以这种格式添加该内容:
echo "hello" >> greetings.txt
#1 楼
# possibility 1:
echo "line 1" >> greetings.txt
echo "line 2" >> greetings.txt
# possibility 2:
echo "line 1
line 2" >> greetings.txt
# possibility 3:
cat <<EOT >> greetings.txt
line 1
line 2
EOT
如果需要sudo(其他用户特权)来写入文件,请使用以下命令:
# possibility 1:
echo "line 1" | sudo tee -a greetings.txt > /dev/null
# possibility 3:
sudo tee -a greetings.txt > /dev/null <<EOT
line 1
line 2
EOT
#2 楼
printf '%s\n %s\n' 'Host localhost' 'ForwardAgent yes' >> file.txt
或者,如果要使用文字标签(而不是问题中的四个空格):
printf '%s\n\t%s\n' 'Host localhost' 'ForwardAgent yes' >> file.txt
您可以实现与
echo
效果相同,但具体实现因实现而异,而printf
不变。#3 楼
echo -e "Hello \nWorld \n" >> greetings.txt
#4 楼
另一种方法是使用tee
tee -a ~/.ssh/config << END
Host localhost
ForwardAgent yes
END
tee
手册页中的一些选择行:tee实用程序将标准输入复制到标准输出,从而形成一个
复制零个或多个文件。
-a-将输出追加到文件,而不是覆盖它们。
#5 楼
这是在文件中附加多行的示例:{
echo ' directory "/var/cache/bind";'
echo ' listen-on { 127.0.0.1; };'
echo ' listen-on-v6 { none; };'
echo ' version "";'
echo ' auth-nxdomain no;'
echo ' forward only;'
echo ' forwarders { 8.8.8.8; 8.8.4.4; };'
echo ' dnssec-enable no;'
echo ' dnssec-validation no;'
} >> your_file.txt
评论
值得注意的是,此变体是ShellCheck建议github.com/koalaman/shellcheck/wiki/SC2129的一部分。
–mloskot
12月11日15:32
#6 楼
SED可以这样在文件末尾附加一行:sed -i '$ a text to be inserted' fileName.file
$
选择文件末尾,a
告诉它要附加,然后是要插入的文本。然后当然是文件名。来源:
http://www.yourownlinux.com/2015/04/sed-command-in-linux-append-and-insert-lines -to-file.html
=========================
这种方法是否比其他解决方案有更多好处? />是的,这种方法还具有附加优势,可以将其附加到搜索中返回的所有文件,例如:
在许多目录中的每个html页面上都缺少。
================================ ====
评论
如果您将显示在文件中追加多行的语法,那么这将是该问题的答案(尽管不是很有用)。所有其他答案都只需编写新文本即可。该答案将读取整个文件并重写它以及添加的文本。这种方法比其他方法有什么好处吗?
– G-Man说“恢复莫妮卡”
16 Mar 18 '16 at 20:09
这仅适用于GNU sed。 BSD sed出现以下错误:命令a期望\,后跟文本。因此,请勿将其用于脚本解决方案;容易断裂。 (或正确执行此操作,因为BSD所需的语法与POSIX兼容,并且也适用于GNU sed。
–通配符
16 Mar 18 '16 at 20:28
其他答案可以与find一起使用,如下所示:find。 -name“ * .txt” -exec sh -c'printf“%s \ n \ t%s \ n”“主机本地主机”“ ForwardAgent是” >>“ $ 1”'sh {}“;”。
– G-Man说“恢复莫妮卡”
16-3-19在4:12
这是一个非常好的解决方案,因为它不执行流重定向(>,>>),因此不会遭受诸如运行sudo echo'something'> / file等问题。对我来说,它完全允许在lxd容器中的文件上添加一行,如下所示:lxc exec c sed-'$ a newline'/ myfile。
–德拉科·阿特(Draco Ater)
16年8月23日在19:19
当文件不是新行的末尾时,echo“ a new line” >> foo.file不会创建新行,但是sed -i'$ aa new line'foo.file可以,所以sed更好,尤其是您希望始终在文件后添加新行。
–zhouji
16/09/12在10:27
#7 楼
我使用sed是因为它可以与sudo一起使用。例如:sudo sed -i '$ a text to be inserted' fileName.file
替代方案非常丑陋,如:
sudo bash -c "echo a text to be inserted >> fileName.file"
ssh。
评论
为什么这个答案不好?这看起来像我需要的解决方案。有什么问题吗?如果没有,我将使用它并对其进行投票。
–MountainX
16年7月23日在8:20
您的sed -i不以扩展名作为参数吗?您的示例可能具有错误的参数。
– protometa
17年1月4日在19:57
#8 楼
另一个衬里是:echo "Greetings 1" >> greetings.txt && echo "Greetings 2" >> greetings.txt
我更喜欢
-e
选项,因为它提供了更多控制权:echo -e "Greeting 1\nGreetings 2\n" >> greetings.txt
#9 楼
可以使用Perl或Python模拟cat >> out.txt
,以达到相同的效果。 Perl:perl -e 'open(fh,">>","./out.txt");while(<>){printf(fh "%s",$_)};close(fh);'
Python:
python -c 'import sys;f=open(sys.argv[1],"a");l=[i for i in sys.stdin];f.write("".join(l))' out.txt
请注意,对于python,您必须按Ctrl + D两次。有关更多信息,请参见有关stackoverflow的相关问题。
#10 楼
除了主要答案外,如果文件需要超级用户权限,则仅在sudo
前面添加echo
是行不通的。但是echo
以普通特权运行。这将对超级用户有效:
>>
评论
您在这里不需要su(sudo su不好)。但是您是对的,您需要做一些事情来管理shell重定向;也许sudo sh -c“ echo stuff >> file.txt”。没有节余,而是更好的做法。
–roaima
19年8月8日在13:51
评论
@TheLegend称为“此处文档”。在手册页中查看该段落。
– Hauke Laging
13年5月27日在15:00
另一种可能性是(echo“ line 1”; echo“ line 2”)>> greetings.txt。
–ott--
13年5月27日在15:38
@ ott--您不需要真正的子shell(即可以保存一个新进程),这就足够了:{echo“ line 1”;回显“第2行”; } >> greetings.txt
– Hauke Laging
13年5月27日在16:10
EOT和EOF有什么区别?
– cikatomo
16年9月9日在18:34
@cikatomo在猫<< EOT中,EOT只是一个随机字符串。也可能是猫<< FOO。
– Hauke Laging
16年1月9日在20:37