Linux如何实现逐行读取文件,Shell脚本逐行读取文件怎么写?

Linux 逐行读取文件详解

在 Linux 环境中,逐行读取文件是脚本编写和数据处理中最常见的需求,根据不同的应用场景(如简单显示、复杂逻辑处理或高性能需求),可以选择不同的实现方式。

使用 Shell 脚本的 while 循环(最常用)

这是在 Bash 脚本中处理文件的标准方法,适用于需要对每一行执行特定逻辑的场景。

【linux从入门到入土】shell脚本创建和基本运行方法,输出第一个hello world
加载中
【linux从入门到入土】shell脚本创建和基本运行方法,输出第一个hello world

标准写法:

while IFS= read -r line; do
    echo "当前行内容: $line"
done < "file.txt"

关键参数解析:

  • IFS=:将内部字段分隔符(Internal Field Separator)设置为空,这样可以防止行首和行尾的空格或制表符被自动删除
  • read -r-r 参数防止反斜杠 被当作转义字符处理,确保读取到的是原始文本

    Linux如何实现逐行读取文件,Shell脚本逐行读取文件怎么写?

  • < "file.txt":将文件内容重定向输入到 while 循环中。

使用 awk 处理(高效处理)

awk 是一种强大的文本处理语言,它默认就是逐行读取并处理的,速度比 while 循环快得多。

  • 打印每一行:
    awk '{print $0}' file.txt
  • 根据条件读取并处理:
    # 仅打印包含 "Error" 关键字的行
    awk '/Error/ {print "发现错误: " $0}' file.txt
  • 处理特定列:
    # 打印每行的第一列
    awk '{print $1}' file.txt

使用 sed 处理(流编辑器)

sed 适用于对文件的每一行进行替换、删除或特定行提取

  • Linux如何实现逐行读取文件,Shell脚本逐行读取文件怎么写?

    逐行打印(等同于 cat):

    sed -n 'p' file.txt
  • 读取并替换每行中的字符串:
    # 将每行中的 "old" 替换为 "new"
    sed 's/old/new/g' file.txt

使用 Python 实现(复杂逻辑)

当读取逻辑过于复杂(如需要调用 API、进行复杂的数学运算)时,建议使用 Python。

推荐写法:

with open('file.txt', 'r', encoding='utf-8') as f:
    for line in f:
        # .strip() 用于去除行尾的换行符 n
        print(line.strip())
  • 优点:内存效率高(迭代器模式),不会一次性将大文件加载到内存中。

方案对比与选择指南

根据你的需求选择最合适的工具:

  • 简单逻辑/系统管理脚本 $rightarrow$ 使用

    Linux如何实现逐行读取文件,Shell脚本逐行读取文件怎么写?

    while read

  • 大规模文本过滤/字段提取 $rightarrow$ 使用 awk
  • 快速文本替换/行删除 $rightarrow$ 使用 sed
  • 复杂业务逻辑/数据分析 $rightarrow$ 使用 Python

常见陷阱提示

  • 大文件处理:避免使用 for line in $(cat file.txt),因为这会将整个文件加载到内存中,且在遇到空格时会将一行拆分成多个元素,导致结果错误且内存溢出
  • 权限问题:确保执行读取操作的用户对目标文件具有 r (read) 权限。
  • 换行符问题:如果文件来自 Windows(CRLF),建议先使用 dos2unix file.txt 转换,否则 read 命令可能会在行尾留下不可见的 r 字符。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/488044.html

(0)
服务的短信有什么作用,短信验证码收不到怎么办?
上一篇 2026年7月12日 17:52
HKT香港家宽618有折扣吗,深港IEPL专线怎么选?
下一篇 2026年7月12日 17:55

相关推荐

  • 5m带宽服务器最多能支持多少并发数,网站并发量怎么计算?

    5M带宽的服务器,在常规图文网站场景下,大约能支撑50到150个用户同时在线,但如果用户都在看高清视频或下载大文件,可能10个并发就会把带宽打满,并发数不是一个固定值,它由单次请求的传输大小和用户行为决定,这个答案可能和很多人想的“5M等于5000KB,能很多人用”不一样,原因在于,带宽的单位是比特(bit……

    2026年8月26日
    300
  • 戴尔T410服务器价格究竟是多少,戴尔T410服务器怎么样

    六核版本的E5645在二手市场中价格比四核版本高出约30%-50%,因为其多线程性能在虚拟化场景下仍有发挥余地,内存容量与类型该机型使用DDR3 ECC REG内存,单条容量从2GB到16GB不等,8GB内存条在二手市场上约20-30元,16GB条约50-80元,整机内存插槽共8个,最大支持64GB,如果购买时……

    2026年7月30日
    400
  • linux dd刻录怎么用?linux系统制作u盘启动盘

    在 Linux 系统中,dd 命令是一个功能强大但极其危险的命令行工具,常用于将镜像文件(ISO、IMG 等)写入到 U 盘、SD 卡或硬盘中,也就是常说的“刻录”,⚠️ 重要警告:dd 命令没有确认步骤,如果目标设备(of=)选择错误,会立即覆盖该磁盘上的所有数据,且无法恢复!请务必在操作前仔细核对设备名称……

    2026年7月10日
    10700
  • 安徽六安电信dns的服务器地址是多少?,怎么设置?

    安徽六安电信的DNS服务器地址,主DNS是202.102.192.68,备DNS是202.102.199.68,这两个地址是中国电信安徽分公司官方指定的域名解析服务器,覆盖六安全市,使用默认设置即可获得稳定流畅的解析体验,如果你遇到部分网站打不开或加载慢,先检查DNS配置是否被篡改,再考虑其他因素,了解DNS与……

    2026年8月14日
    500
  • 如何在Linux下部署Apache Django?Linux服务器配置Apache

    Apache、Django与Linux是构建高并发、高安全性Web应用的黄金三角组合,其核心优势在于Linux提供底层稳定支撑,Django负责快速业务逻辑开发,而Apache作为成熟稳定的反向代理服务器,三者结合能实现从底层系统到上层应用的全链路性能优化与安全加固,在2026年的Web开发环境中,虽然Ngin……

    2026年7月8日
    9400
  • Linux死进程怎么强制关闭,如何查看并杀死卡死的进程?

    Linux 死进程详解与处理指南在 Linux 系统中,用户提到的“死进程”通常指两种完全不同的状态:僵尸进程 (Zombie Process) 和 不可中断睡眠进程 (Uninterruptible Sleep Process),处理这两者的逻辑截然不同,僵尸进程 (Zombie Process)僵尸进程是指……

    2026年7月14日
    900
  • 4g8核5m服务器能支持多少pv?,服务器并发量怎么算?

    一台4核8G内存、5M带宽的服务器,在合理优化和常规业务场景下,通常可以支撑日均5万到10万PV的访问量,峰值承载能力更高,但实际数值取决于页面大小、缓存策略和并发模型,影响PV承载量的核心因素PV估算不是死公式,而是多维度的动态平衡,理解以下几个关键点,才能判断你的服务器是否需要升级,带宽瓶颈与并发连接数5M……

    2026年8月2日
    000
  • Linux mm命令怎么用,Linux内存占用如何查看?

    Linux 内存管理 (Memory Management) 详解在 Linux 系统中,并没有一个名为 mm 的单一标准命令,通常情况下,当提到 “mm” 时,指的是 Memory Management (内存管理) 这一内核子系统,或者是用户想要了解如何通过命令来监控和管理内存,以下是关于 Linux 内存……

    2026年7月13日
    11100
  • 一个服务器可以连多少个TCP,连接数上限是多少?

    一个服务器能连多少个TCP连接,答案是:远不止65535这个数字, 决定因素在于四元组组合、文件描述符、内存与内核参数,在合理的调优与硬件条件下,单台服务器承载数十万级并发TCP连接是现实可行的,为什么“65535上限”是误解先解开这个心结,很多朋友第一反应是“端口号只有65535个,TCP连接肯定也超不过这个……

    2026年8月20日
    400
  • 个人电脑win7系统做服务器能支持多少人浏览?,怎么设置?

    个人电脑用Win7系统做服务器,在家庭宽带和常规硬件下,通常只能支持几十到几百人同时浏览,极限情况经优化可达500人左右,但稳定性会大打折扣,这个结论基于大多数家庭环境的上传带宽和Win7系统本身的限制,如果你只是想搭个小站点给朋友测试,或者跑个低负载的小型应用,Win7勉强能应付;但要想正经运营一个面向公众的……

    2026年7月24日
    500

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注