使用重定向符写入文件

通常我们在linux下写入文件,是通过以下两种格式

1
2
output > filename
output >> filename

“>” 符号是覆盖写入,如果写入的文件不存在,则创建文件,并写入内容;如果写入的文件存在,则将文件原先内容清空,写入新内容。

“>>”符号是追加写入,如果写入的文件不存在,则创建文件,并写入内容;如果写入的文件存在,则在原先文件已有内容的基础上追加写入新内容。

注意: 对某个文件进行写入时,需要有该文件的写入权限,否则linux系统将会提示 permission denied 错误,如下:

upload successful

使用重定向符>覆盖写入文件例子如下:

1
echo "this is a line" > 1.txt     #在linux中echo需要将内容用""符号括起来,而windows中echo则不用 

upload successful

在linux如果要拒绝用户覆盖写入一个已存在的文件,可以通过命令 set -o noclobber 进行设置,如下:

1
2
set -o noclobber
echo "overwrite file" > 1.txt

upload successful

但是使用 >|操作符可以让用户忽略noclobber的设置,如下:

upload successful

使用重定向符 >> 追加写入文件的例子如下:

1
echo "this is a new line" >> 1.txt

upload successful

使用printf命令进行文件内容写入

1
printf "Hello, I'm %.\n" $USER > 1.txt

upload successful

另外我们可以将任意命令的执行结果写入文件,如下:

1
2
whoami > 1.txt
date +"Year: %Y, Month: %m, Day: %d" > 1.txt

upload successful

upload successful

使用tee命令写入文件

tee命令会从标准输入中读取内容,并立刻写入到标准输出中的一个或多个文件,该命令执行完成后会将写入的内容打印到命令行终端,如果写入的文件不存在,则会创建一个文件,如下:

1
echo "this is a line" | tee 1.txt

upload successful

tee 命令写入方式是覆盖写入,如果要让tee追加写入内容到文件中的话,需要调用参数-a(--apend),如下:

1
echo "this is a line" | tee -a 1.txt

upload successful

如果我们不想让tee 命令执行后的结果打印到命令行终端(即标准输出中),可以用重定向符>,将tee命令执行后的结果输出到 /dev/null,如下:

1
echo "this is a new line" | tee -a 1.txt >/dev/null

upload successful

tee命令可以将内容一次性写入到多个文件中,如下:

1
echo "this is a line" | tee 4.txt 5.txt 6.txt

upload successful

Heredoc方式文件多行写入

迟点更新

参考文章
1
https://linuxize.com/post/bash-write-to-file/