编写Bash脚本或在Linux命令行上工作时,最常见的任务之一是读写文件。
本文介绍了如何使用重定向操作符和tee
命令将文本写入Bash中的文件。
使用重定向运算符写入文件
在Bash中,输出的重定向使您可以捕获命令的输出并将其写入文件。
重定向并将输出写入文件的一般格式如下:
output > filename
output >> filename
- 该
>
重定向操作写入输出到指定的文件。如果文件存在,则将其截断为零长度。否则,将创建文件。使用此运算符时请格外小心,因为您可能会覆盖重要文件。 - 该
>>
重定向操作符追加输出到指定的文件。如果文件不存在,则创建该文件。
您需要对该文件具有写权限。否则,您将收到一个权限被拒绝的错误。
这是一个简单的示例,显示了如何将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
其他用户拥有的文件结合使用并写入其中。要将文本追加到您没有写许可权的文件中,请sudo
在之前加上tee
:
echo "this is a line" | sudo tee file.txt
的echo
命令输出作为输入提供给传递tee
,这提升了须藤权限和文本写入到文件中。
结论
在Linux中,要将文本写入文件,请使用>
和>>
重定向运算符或tee
命令。
原创文章,作者:校长,如若转载,请注明出处:https://www.yundongfang.com/Yun35644.html