linux bash 写入文件

本文介绍如何使用Bash中的echo和tee命令将命令输出重定向到文件,包括覆盖和追加两种模式,以及如何在保持屏幕输出的同时将数据保存到文件。

目录

方法1:echo

方法2:tee


 

方法1:echo

要将Bash命令的输出写入文件,可以使用右尖括号符号(>)或双右尖符号(>>):

右尖括号(>)

右尖括号号(>)用于将bash命令的输出写入磁盘文件。如果没有指定名称的文件,则它将创建一个具有相同名称的新文件。如果该文件名称已经存在,则会覆盖原文件内容。

双右尖括号(>>)
它用于将bash命令的输出写入文件,并将输出附加到文件中。如果文件不存在,它将使用指定的名称创建一个新文件。

从技术上讲,这两个运算符都将stdout(标准输出)重定向到文件。

当第一次写入文件并且不希望以前的数据内容保留在文件中时,则应该使用右尖括号(>)。也就是说,如果文件中已经存在内容,它会清空原有数据内容,然后写入新数据。使用双右尖括号(>>)则是直接将数据附加到文件中,写入后的内容是原文件中的内容加上新写入的内容。

示例
ls命令用于打印当前目录中存在的所有文件和文件夹。但是,当运行带有直角括号符号(>)的ls命令时,它将不会在屏幕上打印文件和文件夹列表。而是将输出保存到用指定的文件中,即如下脚本代码所示:

#!/bin/bash  
#Script to write the output into a file  

#Create output file, override if already present  
output=output_file.txt  

#Write data to a file  
ls > $output  

#Checking the content of the file  
gedit output_file.txt

执行上面示例代码,得到以下结果:
仅将输出写入文件

如此处所示,ls命令的输出重定向到文件中。要将文件的内容打印到终端,可以使用以下cat命令格式:

#!/bin/bash  
#Script to write the output into a file  

#Create output file, override if already present  
output=output_file.txt  

#Write data to a file  
ls > $output  

#Printing the content of the file  
cat $output

执行上面示例代码,得到以下结果:
内容打印到终端

如果要在不删除原文件数据内容的情况下,将多个命令的输出重定向到单个文件,则可以使用>>运算符。假设要将系统信息附加到指定的文件,可以通过以下方式实现:

#!/bin/bash  
#Script to write the output into a file  

#Create output file, override if already present  
output=output_file.txt  

#Write data to a file  
ls > $output  

#Appending the system information  
uname -a >> $output  

#Checking the content of the file  
gedit output_file.txt

在这里,第二条命令的结果将附加到文件末尾。可以重复几次此过程,以将输出追加到文件末尾。

执行上面示例代码,得到以下结果:
将输出追加到文件末尾

方法2:tee

有些人可能不喜欢使用>>>运算符将输出写入文件,因为终端中将没有命令的输出。可以通过使用tee命令将接收到的输入打印到屏幕上,同时将输出保存到文件中。

#!/bin/bash  
#Script to write the output into a file  

#Create output file, override if already present  
output=output_file.txt  

#Write data to a file  
ls | tee $output

执行上面示例代码,得到以下结果:
将输出保存到文件

>运算符一样,它将覆盖文件的原内容,但也会在屏幕上打印输出。如果要在不使用tee命令删除文件内容的情况下将输出写入文件,则可以使用以下格式将输出打印到终端,参考以下代码:

#!/bin/bash  
#Script to write the output into a file  

#Create output file, override if already present  
output=output_file.txt  

echo "<<<List of Files and Folders>>>" | tee -a $output  
#Write data to a file  
ls | tee $output  

echo | tee -a $output  
#Append System Information to the file  
echo "<<<OS Name>>>" | tee -a $output  
uname | tee -a $output

执行上面示例代码,得到以下结果:
附加到文件末尾

上面示例不仅将输出附加到文件末尾,而且还将输出打印在屏幕上。

 

 

### 在 Linux 系统中写入文件的方法 #### 使用 `echo` 命令 可以通过 `echo` 命令来向文件写入内容。此方法简单快捷,适用于快速添加少量文本。 - **覆盖写入** 覆盖现有文件中的所有数据或将新内容写入到不存在的新文件中。 ```bash echo 'i love u' > a.txt ``` - **追加写入** 将新的字符串附加到已有文件的末尾而不删除原有内容;如果目标文件尚不存在,则会创建它并写入指定内容。 ```bash echo 'i love u' >> a.txt ``` 上述两种方式均能实现不同模式下的文件写入功能[^5]。 #### 利用 `cat` 工具 除了简单的命令外,还可以借助更强大的工具如 `cat` 来完成多行或多源的数据录入工作。 对于单次大量输入场景下,可以直接打开编辑界面逐行键入直至结束标记(通常为 Ctrl+D),期间所输入的一切都将被保存至指定位置: ```bash cat > filename << EOF line one line two ... EOF ``` 当面对多个来源需要合并的情况时,也可以利用重定向符号轻松达成目的: ```bash cat file1 file2 > combinedfile ``` 这种方式不仅限于纯文本处理,还支持二进制对象的操作[^3]。 #### 应用 `sed` 编辑器 虽然主要用途在于查找替换以及格式转换等方面,但 Sed 同样具备一定的直接修改能力——即所谓的“就地编辑”。 不过需要注意的是,默认情况下 Sed 并不会真正改变原文件而是仅显示改动后的样子,因此要记得加上 `-i` 参数以激活实际变更行为: ```bash sed -i 's/oldstring/newstring/' targetfile ``` 这使得 Sed 成为了自动化脚本编过程中不可或缺的好帮手之一[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值