我怎么能将此行附加到
alias list='ls -cl --group-directories-first'
到此文件
config.fish
#1 楼
您可以使用>>
运算符将一行文本附加到文件中:echo "hello world" >> my_file.txt
或者在您的情况下
echo "alias list='ls -cl --group-directories-first'" >> config.fish
请注意不同类型的报价。
#2 楼
除了Stefano的答案外,您还可以使用cat
:使用heredoc:
$ cat >> config.fish <<'EOF'
> alias list='ls -cl --group-directories-first'
> EOF
<<'EOF'
意味着“将以下内容作为输入,直到到达只是EOF
的行。”引号意味着直接输入。或在stdin上输入行:
$ cat >> config.fish
然后粘贴或键入该行,按Enter转到新行,然后按Ctrl + D标记结束。
#3 楼
有很多无需打开文本编辑器即可追加到文件的方法,特别是通过Ubuntu中的多个可用文本处理实用程序。通常,任何允许我们执行添加了open()
标志的O_APPEND
syscall的东西,都可以用来附加到文件中。dd
实用程序的GNU版本可以将数据附加到文件中。带有conv=notrunc oflag=append
的文件printf "\nalias list='ls -cl --group-directories-first'\n" | dd conv=notrunc oflag=append bs=1 of=config.fish
可移植的是,我们可以在管道的右侧使用如下所示的内容:
dd conv=notrunc seek=$(wc -c < testFile.txt) bs=1 of=testFile.txt
请注意
bs=1
的使用,这是为了防止从管道中进行短读。当需要附加到文件并将其发送到stdout或下一个命令时,可以使用
tee
命令。管道tee -a config.fish <<< "alias list='ls -cl --group-directories-first'"
awk
具有附加运算符>>
,它也是可移植的并由POSIX规范定义。awk 'BEGIN{ printf "alias list=\x27ls -cl --group-directories-first\x27\n" >> "config.fish" }'
我们可以结合使用
sed
的标志$
来匹配最后一行,其中a
用于追加,-i
用于就地编辑。sed -i '$a alias list='"'"'ls -cl --group-directories-first'"'" config.fish
甚至可以在Python 3中实现类似
dd
的功能: #!/usr/bin/env python3
# read bytes from stdin, append to specified file
import sys
with open(sys.argv[1],'ab') as f:
f.write(sys.stdin.buffer.read())
另请参见:
bash中<<,<<<和<<有什么区别?
&>和2>&1
有什么区别?如何将stderr重定向到文件
有什么区别?
“重定向”和“管道”之间有什么区别?
评论
我自己使用echo,但是要小心,如果只指定一个>,则文件将被截断,而不是追加。为了更安全的命令,您可以使用sed:sed -i'$ a hello world'文件名
–反转
2011-1-25在8:05
说明:-i将更新文件(否则它将仅将结果打印到stdout),$是正则表达式,它将匹配文件的末尾,并在文件名后追加以下文本。
–反转
2011-1-25在8:08
echo“ hello world” >> my_file.txt不会使用HW创建新的最后一行,而是将其添加到最后一行的字符串中。
– Timo
17年3月3日在7:28
什么是HW @timo?
– 7wp
18年7月3日在3:50
也许是“ Hello World” @ 7wp :)回声增加了换行符(使它成为一行而不是一串字符)。您可以在末尾使用-n关闭换行符。
– Stefano Palazzo
18年7月3日在14:59