如何在 Bash 中循环遍历文件内容 ?

Bash (Bourne-Again SHell),是一种流行的命令行 SHell 脚本语言,因其简单和易用而被广泛使用。最常见的任务之一,可能需要使用 Bash 遍历文件的内容。

在本文中,我们将探索在 Bash 脚本中使用不同的方法来循环遍历文件内容,包括逐行和逐字读取。

使用 while 循环和 read 命令

while 循环结合 read 命令是在 Bash 中遍历文件内容的最常用方法。该方法逐行读取文件,对于处理无法装入内存的大文件特别有用。

复制代码
#!/bin/bash

filename="example.txt"

while IFS= read -r line
do
    echo "$line"
done < "$filename"

在本例中,我们使用 IFS 变量来指定字段的分隔符(默认情况下是换行符)。read 命令读取每一行,echo 命令将该行打印到控制台。

使用 for 循环和 cat 命令

循环遍历文件内容的另一种方法是使用 for 循环和 cat 命令。

这个方法比 while 循环和 read 命令效率低,因为它在循环之前将整个文件读入内存。

复制代码
#!/bin/bash

filename="example.txt"

for line in $(cat "$filename")
do
    echo "$line"
done

在这个例子中,我们使用 cat 命令来读取文件的全部内容,使用 for 循环遍历每一行。但是,该方法默认情况下使用空格(空格、制表符和换行符)拆分了内容,这可能导致处理每行有多个单词的文件时出现意外行为。

使用 IFS 进行单词循环

如果需要一个字一个字地处理文件,可以使用 IFS 变量将分隔符更改为空格。

复制代码
#!/bin/bash

filename="example.txt"

IFS=$' \t\n'
for word in $(cat "$filename")
do
    echo "$word"
done

在本例中,我们将 IFS 变量设置为空格,制表符,和换行字符,以单词为分隔循环遍历文件内容。

使用 awk 高级循环

对于更高级的文件处理,可以使用 awk 命令,这是一个功能强大的文本处理工具,具有内置循环功能。

复制代码
#!/bin/bash

filename="example.txt"

awk '{ for (i=1; i<=NF; i++) print $i }' "$filename"

在本例中,awk 读取文件并使用其内置变量 NF (字段数)和 $i(当前字段值)循环遍历每个字段(单词),此方法对于更复杂的文本操作任务特别有用。

我的开源项目

相关推荐
junlaii16 小时前
Windows Claude Code Git Bash 依赖修复教程
windows·git·bash
Percep_gan1 天前
解决-bash: /usr/bin/yum: No such file or directory
开发语言·bash
gis分享者2 天前
Bash 中如何使用正则表达式进行文本处理?(中等)
正则表达式·bash·shell·文本·处理
可能是这样吧3 天前
向已有仓库上传,并单独建分支(使用 Git Bash)
git·bash
一个平凡而乐于分享的小比特3 天前
Linux/Unix系统主流脚本语言--Bash语言
linux·bash·脚本语言
gis分享者3 天前
请编写一个 Bash 脚本检查系统中的所有服务状态(中等)
bash·shell·服务·状态·检查·所有
egoist20233 天前
【Linux仓库】超越命令行用户:手写C语言Shell解释器,解密Bash背后的进程创建(附源码)
linux·c语言·bash·xshell·环境变量·命令行参数·内建命令
Lenyiin3 天前
《 Linux 修炼全景指南: 八 》别再碎片化学习!掌控 Linux 开发工具链:gcc、g++、GDB、Bash、Python 与工程化实践
linux·python·bash·gdb·gcc·g++·lenyiin
m0_743125133 天前
claude --version 报错Claude Code on Windows requires git-bash (https://git-scm.com/downloads/win).
开发语言·git·bash
风雨飘逸3 天前
【shell&bash进阶系列】(二十一)向脚本传递参数(shift和getopts)
linux·运维·服务器·经验分享·bash