如何使用重定向操作符和tee命令将文本写入Bash中的文件

系统 Linux
本文介绍了如何使用重定向操作符和tee命令将文本写入Bash中的文件。

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

本文介绍了如何使用重定向操作符和tee命令将文本写入Bash中的文件。

使用重定向运算符写入文件

在Bash中,输出的重定向使您可以捕获命令的输出并将其写入文件。

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

  1. output > filename  
  2. output >> filename  

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

>>重定向操作符将输出追加到指定的文件。如果文件不存在,则创建该文件。

您需要对该文件具有写权限。否则,您将收到一个权限被拒绝的错误。

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

  1. linuxmi@linuxmi:~$ echo "welcome to www.linuxmi.com" > linuxmi.txt 

为了防止覆盖现有文件,请使用set内置功能启用“ noclobber”选项: 

  1. linuxmi@linuxmi:~$ set -o noclobber  
  2. linuxmi@linuxmi:~$ echo "welcome to www.linuxmi.com" > linuxmi.txt  

输出如下:

bash: linuxmi.txt:无法覆盖已存在的文件

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

  1. linuxmi@linuxmi:~$ set -o noclobber  
  2. linuxmi@linuxmi:~$ echo "welcome to www.linuxmi.com" >| linuxmi.txt  

>>操作符将输出追加到文件的末尾,而不是覆盖文件: 

  1. linuxmi@linuxmi:~$ echo "welcome to www.linuxmi.com" >> linuxmi.txt 

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

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

如果要将多个行写入文件,请参考Here document(Heredoc)重定向。

例如,您可以将内容传递给cat命令并将其写入文件: 

  1. cat << EOF > linuxmi.com.txt 

当前的工作目录是: $PWD

您以以下身份登录 $(whoami)

EOF

要附加这些行,在文件名之前用>>修改>: 

  1. cat << EOF >> linuxmi.txt 

当前的工作目录是: $PWD

您以以下身份登录 $(whoami)

EOF

您可以将任何命令的输出写入文件: 

  1. linuxmi@linuxmi:~$ date +"Year: %Y, Month: %m, Day: %d" > xxvi.txt 

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

使用tee命令写入文件

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

  1. linuxmi@linuxmi:~$ echo "welcome to www.linuxmi.com" | tee linuxmi.txt 

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

  1. linuxmi@linuxmi:~$ echo "welcome to www.linuxmi.com" | tee -a linuxmi.com.txt 

如果您不希望tee写入标准输出,则可以将其重定向到/dev/null: 

  1. linuxmi@linuxmi:~$ echo "welcome to www.linuxmi.com" | tee www.linuxmi.com.txt >/dev/null 

要将文本写到多个文件中,请指定文件作为tee命令的参数: 

  1. linuxmi@linuxmi:~$ echo "welcome to www.linuxmi.com" | tee file_1.txt file_2.txt file_3.txt 

该tee命令的另一个优点是,您可以将其与sudo其他用户拥有的文件结合使用并写入其中。要将文本追加到您没有写许可权的文件中,请sudo在之前加上tee: 

  1. linuxmi@linuxmi:~$ echo "welcome to www.linuxmi.com" | sudo tee linuxmi.txt 

echo命令输出作为输入传递给tee, tee将提升sudo权限并将文本写入文件。

总结

在Linux中,要将文本写入文件,请使用>和>>重定向运算符或tee命令。 

 

责任编辑:庞桂玉 来源: Linux公社
相关推荐

2018-11-12 14:35:47

BashhereLinux

2010-07-14 14:55:07

Perl操作符

2010-07-13 14:10:44

ICMP协议

2019-12-18 09:45:24

BashshellLinux

2022-11-17 08:40:14

Linux输出错误重定向

2010-06-23 16:14:52

Linux Bash

2024-01-07 20:15:49

Python编程语言

2009-08-21 09:30:05

is和as操作符

2023-06-27 09:21:33

2021-07-01 11:07:49

Swift 自定义操作符

2020-11-18 09:29:06

NginxHTTPHTTPS

2014-01-14 10:22:21

LinuxLinux命令

2021-10-09 13:48:11

操作符Python运算符

2009-07-21 12:47:04

Scala私有字段定义操作符

2020-06-28 07:33:01

source命令BashLinux

2022-11-10 15:08:44

Linux输入输出

2009-07-21 09:31:00

Scala操作符

2009-08-19 17:26:28

C# 操作符

2016-11-17 15:35:51

RxJava操作Subscriber

2009-06-30 15:37:27

Servlet和JSP
点赞
收藏

51CTO技术栈公众号