如何在 Shell 脚本中实现文件的读写操作?(容易)

👨‍⚕️ 主页: gis分享者

👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍⚕️ 收录于专栏:Shell 面试

文章目录

  • 一、🍀前言
    • [1.1 ☘️读取文件](#1.1 ☘️读取文件)
    • [1.2 ☘️写入文件](#1.2 ☘️写入文件)
    • [1.3 ☘️混合读写操作](#1.3 ☘️混合读写操作)
    • [1.4 ☘️扩展知识](#1.4 ☘️扩展知识)

一、🍀前言

Shell脚本是自动化任务和系统管理的强大工具,文件操作是其核心功能之一。本文将详细介绍如何在Shell脚本中实现文件的读写操作。

1.1 ☘️读取文件

读取整个文件内容:

通常使用 cat 或 while read line 等命令。

powershell 复制代码
# 使用cat直接输出文件内容
cat /path/to/file.txt

# 将文件内容赋值给变量(小文件适用)
content=$(cat /path/to/file.txt)
echo "$content"  # 注意用双引号保留换行

逐行读取文件(推荐大文件):

powershell 复制代码
while IFS= read -r line; do
  echo "Line: $line"
done < /path/to/large_file.txt

IFS= 禁用字段分隔符,避免首尾空格被截断。

-r 禁止反斜杠转义,保留\原始字符。

< 重定向文件作为输入。

读取特定行(如第N行):

powershell 复制代码
# 使用sed
sed -n '3p' /path/to/file.txt  # 输出第3行
# 使用awk
awk 'NR==3' /path/to/file.txt

1.2 ☘️写入文件

覆盖写入(清空原内容):

powershell 复制代码
# 单行内容
echo "Hello World" > output.txt

# 多行内容(Here Document)
cat > output.txt << EOF
Line 1
Line 2
EOF

追加写入:

powershell 复制代码
echo "New Line" >> output.txt

动态生成内容:

powershell 复制代码
# 结合命令输出
ls -la > file_list.txt

# 使用变量
user="John"
echo "Welcome, $user!" >> welcome.txt

1.3 ☘️混合读写操作

读取并处理内容后写入新文件:

powershell 复制代码
# 将原文件每行添加行号
awk '{print NR ". " $0}' input.txt > numbered.txt

# 替换特定文本
sed 's/old_text/new_text/g' input.txt > modified.txt

实时读取并修改文件(避免覆盖):

powershell 复制代码
# 在文件末尾添加内容(安全追加)
echo "Append Text" >> existing_file.txt

# 临时文件替换(原子操作)
tmpfile=$(mktemp)
trap 'rm -f "$tmpfile"' EXIT  # 清理临时文件
awk '{print $0} END {print "New Line"}' input.txt > "$tmpfile"
mv "$tmpfile" input.txt

1.4 ☘️扩展知识

使用重定向符:

powershell 复制代码
>:覆盖写,会清空文件。比如 echo "Hello" > file.txt。
>>:追加写,会在文件末尾添加内容。比如 echo "Hello again" >> file.txt。

读文件中的特定行或字段:

awk:用于处理和分析文本文件中的每一行,比如 awk '{print $1}' file.txt 读取每行的第一个字段。

sed:用于文本替换、插入、删除等操作,比如 sed -n '2p' file.txt 读取文件的第二行。

处理文件更复杂数据:

使用 grep 进行文本搜索,比如 grep "pattern" file.txt 只读出包含指定模式的行。

cut:用于分割文件中的数据,类似 cut -d' ' -f1 file.txt 根据空格分割并读取第一个字段。

避免输入输出错误:

使用 set -e 确保脚本遇到错误时立刻停止运行。

trap 命令处理脚本运行过程中可能出现的信号或错误。例如:

powershell 复制代码
# 当脚本中任何命令返回非零状态(表示执行失败)时,ERR 信号会被触发,从而执行指定的处理函数。‌
error_handler() {
    echo "错误发生,命令返回非零状态。"
    exit 1
}
trap 'error_handler' ERR
相关推荐
xbzb4 天前
Shell 函数:语法、传参与递归调用一次讲透
shell·递归·函数·调用·传参·递归调用
东鹏特饮5 天前
15个实用Linux运维脚本
linux·运维·shell·脚本·redhat·常用生产脚本
Zoom6 天前
【开源】7 天,我用 Rust 复刻了 FinalShell!Rhost v1.0.0 发布
rust·electron·shell
沫璃染墨11 天前
《Qt从零入门系列(十二):Qt文件操作详解——从QFile读写到QFileInfo与记事本实战》
开发语言·网络·c++·qt·交互·信号处理·文件
皓月盈江12 天前
Linux系统grep、sed 、awk介绍下,使用方法及区别?
linux·运维·服务器·sed·grep·awk
Tairitsu_H14 天前
[Linux系统] 一切皆文件 | 缓冲区机制 | FILE 结构
linux·运维·服务器·文件·缓冲区
Lsetea14 天前
OpenSSL s_client退出码为0却证书验证失败:严格校验与Shell管道排查
https·shell·ssl证书·openssl·tls
fox_charon16 天前
Windows 下 CLI 参数的引号陷阱:为什么 --resume 'uuid' 会失败
windows·shell·cmd·cli·引号
进击的荆棘17 天前
Linux系统——文件(上)
linux·运维·服务器·文件
j7~17 天前
【Python】(篇六)《基础语法(函数、列表和元组、字典、文件)》---详解
开发语言·python·文件·函数·字典·编程学习·元组与列表