Bash 写入文件

评论 0 浏览 0 2021-01-05

在编写Bash脚本或在Linux命令行上工作时,最常见的任务之一是读写文件。

本文解释了如何在Bash中使用重定向操作符和tee命令将文本写到文件中。

使用重定向操作符向文件写东西

在Bash中,输出的重定向允许你从一个命令中捕获输出,并将其写入文件。

重定向并将输出写入文件的一般格式如下:

output > filename 
output >> filename 
  • >重定向操作符将输出写入给定文件。如果该文件存在,它将被截断为零长度。否则,该文件被创建。使用这个操作符时要特别小心,因为你可能会覆盖一个重要的文件。
  • >>重定向操作符将输出附加到一个给定的文件。如果该文件不存在,将被创建。

你需要对该文件有写入权限。否则,你会收到一个permission denied的错误。

下面是一个简单的例子,显示了如何将echo命令的输出重定向到一个文件。

echo "this is a line" > file.txt

为了防止覆盖现有的文件,请用set内建程序来启用 "noclobber "选项。

$ set -o noclobber
$ echo "this is a line" > file.txt

输出

bash: file.txt: cannot overwrite existing file

>|操作符允许你覆盖Bash中的 "noclobber "选项。

$ set -o noclobber
$ echo "this is a line" >| file.txt

>>操作符将输出结果附加到文件的末尾,而不是覆盖文件。

echo "this is a line" >> file.txt

使用printf命令来创建一个复杂的输出。

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

如果你想写多行到一个文件,请使用这里的文件(Heredoc)重定向。

例如,你可以将内容传递给cat命令,并将其写入一个文件中。

cat << EOF > file.txt
The current working directory is: $PWD
You are logged in as $(whoami)
EOF

要追加行数,在文件名前将>改成>>

cat << EOF >> file.txt
The current working directory is: $PWD
You are logged in as $(whoami)
EOF

你可以把任何命令的输出写到一个文件中去。

date +"Year: %Y, Month: %m, Day: %d" > file.txt

date命令的输出将被写到文件中。

使用 tee 命令向文件写东西

tee命令从标准输入读取数据,并同时向标准输出和一个或多个文件写入数据。

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

tee命令的默认行为是覆盖指定的文件,与>操作符相同。要把输出附加到文件中,请用-a--append)选项来调用该命令。

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

如果你不想让tee写到标准输出,你可以把它重定向到/dev/null

echo "this is a line" | tee file.txt >/dev/null

要把文本写到一个以上的文件中,可以把文件作为参数指定给tee命令。

echo "this is a line" | tee file_1.txt file_2.txt file_3.txt

tee命令的另一个好处是,你可以把它和sudo结合起来使用,并写到其他用户拥有的文件。要向一个你没有写入权限的文件追加文本,可以在tee之前加上sudo

echo "this is a line" | sudo tee file.txt

echo的命令输出被作为输入传给tee,后者提升了sudo权限,并将文本写入文件中。

总结

在Linux中,要将文本写入文件,可使用>>>重定向操作符或tee命令。

如果你有任何问题或反馈意见,请随时留言。

最后更新2023-07-23
0 个评论
标签