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://test.idctop.com/article/488044.html

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

相关推荐

  • 服务短信怎么选才不踩坑,哪个平台最靠谱?

    选择短信服务时,关键在于匹配业务场景,相比价格,到达率和通道稳定性更值得优先考虑, 短信服务看似只是发送一条文字,实际运营中通道质量、接口兼容性、售后响应速度会直接影响验证码到达率、营销活动转化率,甚至账户安全,短信服务商哪家好?从技术实力和稳定性出发市面上的短信服务商数量很多,但真正能保障高并发下稳定送达的并……

    2026年8月3日
    400
  • ASP中ubound函数怎么用?asp ubound函数用法详解

    在ASP环境中,使用UBound函数配合_GS_ASP数组时,核心结论是:必须确保数组已正确初始化且维度匹配,否则将触发“下标越界”运行时错误,建议通过先判断数组是否为空或检查LBound与UBound的关系来规避风险,ASP(Active Server Pages)作为经典的服务器端脚本技术,虽然在现代Web……

    2026年6月13日
    3600
  • 游戏服务器10m带宽能带多少人?,够用吗

    按照这个模型计算,理论峰值是1.25MB除以40KB,约等于32人,如果游戏通信协议做得好,压缩到20KB每人,人数就能翻倍到60人以上,这就是为什么同样10M带宽,有的服带20人就卡成PPT,有的服80人还流畅运行,游戏类型对带宽承载量的决定性影响轻量级像素游戏:实际承载量远超预期以《Minecraft》为例……

    2026年8月7日
    2100
  • linux shell sftp怎么用,常用命令有哪些?

    在Linux Shell环境下,SFTP是进行加密文件传输的核心工具,它直接借用SSH的安全通道,无需额外搭建服务器即可在保证数据机密性的同时完成上传、下载与管理操作,Linux Shell SFTP命令详解与实战掌握SFTP命令是Linux运维人员的基本功,这些命令与FTP类似,但底层加密机制完全不同,以下按……

    2026年7月14日
    900
  • linux元字符有哪些?linux常用元字符及用法详解

    Linux元字符是Shell解析命令时的“语法标记”,理解并熟练运用它们,能让你的命令行操作从手动输入进化为自动化脚本,大幅提升数据处理效率,在Linux的世界里,Shell不仅仅是一个黑漆漆的终端窗口,它更像是一个懂你心思的翻译官,当你敲下一串看似杂乱无章的字符时,Shell背后的元字符(Metacharac……

    2026年7月4日
    17400
  • JazzVPS美国VPS好用吗,美国VPS推荐哪家稳定

    JazzVPS(原DiaHosting)凭借其在香港节点的低延迟优势以及美国线路的国内/国际双优化策略,是目前平衡访问速度与稳定性的高性价比选择,适合对海外服务器有特定网络环境需求的用户,JazzVPS品牌演变与核心定位解析JazzVPS的前身是业内知名的DiaHosting,这一品牌更迭并非简单的更名,而是服……

    2026年6月23日
    2000
  • 国外主机怎么备案,国外主机备案流程是什么?

    针对国外主机怎么备案这一核心问题,首先必须明确一个铁律:使用境外服务器(包括美国、韩国、新加坡等除中国大陆以外的地区)无法直接进行ICP备案,ICP备案(互联网内容提供商备案)是中国工信部对国内网站管理的强制性规定,其审核机制严格限制服务器物理位置必须在中国大陆境内,想要完成合规化运营,必须将网站接入中国大陆境……

    2026年2月24日
    14900
  • Apache怎么配置虚拟服务器?详细步骤教程

    Apache配置虚拟服务器的核心在于修改httpd.conf或sites-enabled目录下的配置文件,通过定义ServerName和DocumentRoot来区分不同域名对应的网站目录,从而实现单IP多站点的托管,在2026年的Web开发环境中,Apache依然是许多企业级应用和传统架构的首选服务器软件,尽……

    2026年6月4日
    4400
  • 奔图打印机与电脑连接后怎样打印,为什么打印不出来

    完成奔图打印机与电脑的物理连接仅仅是第一步,要实现从电脑端输出高质量文档,必须经历硬件连接确认、驱动程序安装、打印参数配置以及任务执行这四个核心环节,只有当这四个环节紧密配合,系统才能准确识别设备并将数据转化为纸张上的图文,在实际操作中,用户常因驱动版本不匹配或端口选择错误导致打印失败,因此遵循标准化的操作流程……

    2026年2月22日
    19700
  • 100M香港服务器一年要多少钱,怎么选?

    100M香港服务器一年的费用通常在8000元至15000元之间,具体取决于带宽配置、硬件规格和服务商资质,这个区间覆盖了大多数个人站长和中小企业的需求,但选择时不能只看价格,带宽质量和机房稳定性同样关键,影响100M香港服务器价格的核心因素带宽类型与线路质量香港服务器带宽分为国际BGP、CN2 GIA、直连中国……

    行业资讯 2026年8月5日
    900

发表回复

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