假设我有一行想要添加到文件中而不打开编辑器。
我怎样才能附加这一行
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
有很多方法可以在不打开文本编辑器的情况下将内容附加到文件,特别是通过 Ubuntu 中的多个可用文本处理实用程序。一般来说,任何允许我们执行带有标志的open()
系统调用的东西O_APPEND
都可以用来将内容附加到文件。
GNU 版本的
dd
实用程序可以将数据附加到文件中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
,即防止管道短读取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
我们甚至可以
dd
在 Python 3 中实现类似的东西:
#!/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())
也可以看看:
答案3
添加到斯特凡诺的回答,您还可以使用cat
:
使用 heredoc:
$ cat >> config.fish <<'EOF' > alias list='ls -cl --group-directories-first' > EOF
<<'EOF'
表示“将以下内容作为输入,直到到达一行EOF
”。引号表示按字面意思理解输入。或者在标准输入中输入以下行:
$ cat >> config.fish
然后粘贴或输入该行,按Enter转到新行,然后按 Ctrl+D 标记结束。