如何在Bash中逐行读取文件(shell逐行读取文件内容)

linux 如何在Bash中逐行读取文件 编写Bash脚本时,有时会遇到需要逐行读取文件的情况。例如,您可能有一个文本文件,其中包含应由脚本处理的数据。在本教程中,我们将讨论如何在Bash中逐行读取文件。 By myfreax 11 Dec 2021

撰写Bash脚本时,有时候也会遇到务必一行行读取文件的情况。例如,您可能有一个文本文档,主要包括须经脚本克服的信息。在教学中,我们在这里探讨如何在Bash中一行行读取文件。

一行行读取文件语法

一行行读取文件最通用性语法如下所示:

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

闭合电路的单行线版本信息:

while IFS= read -r line; do echo $line; done < input_file

这也是如何运行的?

输入文件(input_file就是你要启动的文档的名称,以依据read命令加载。read命令一行行读取文件,然后把每一行分到line变量。处理完毕所有行后,while循环将终止。内部构造字段分节符(IFS设成空字符串,以储存流板追随空格符,那也是read命令的默认行为。

一行行读取文件案例

让我们看看下面的例子。假设我们有一个名字叫做文档,distros.txt主要包括一些最流行的Linux发行版及其手机app包管理器的文件目录,并用分号(,分隔:

distros.txt

Ubuntu,apt
Debian,apt
CentOS,yum
Arch Linux,pacman
Fedora,dnf

要一行行读取文件,可以在终端中运行以下编号:

while IFS= read -r line
do
  echo "$line"
done < distros.txt

编号将一行行读取文件,将每一行分到一个变量,接着回显该变量。大部分而言,我们将看到与应用cat指令显示文件主要内容一样的输出。

如果想想打印出运用apt的发行版应该怎么办?一种方法采用的是if语句,并检查这一家金融机构是否包含apt 子字符串:

while IFS= read -r line
do
  if [[ "$line" == *"apt"* ]]; then
    echo "$line"
  fi
done < distros.txt
Ubuntu,apt
Debian,apt

一行行读取文件时,您还可以将好多个变量传递给read命令,该命令将按照将这一家金融机构拆分为好多个字段IFS。第一个字段分到第一个变量,第二个字段分到第二个变量,依此类推。倘若字段超出变量,则剩余字段将分到最后一个变量。

在下文的例子中,大伙儿IFS设成分号(,和依据2个变量distropm加载命令。从行的一直到第一个分号的相关内容都将分到第一个变量(distro,而行的其余部分将分到第二个变量(pm

while IFS=, read -r distro pm
do
  echo "$pm" is the package manager for "$distro"
done < distros.txt
apt is the package manager for Ubuntu
apt is the package manager for Debian
yum is the package manager for CentOS
pacman is the package manager for Arch Linux
dnf is the package manager for Fedora

替代文件读取方法

操作步骤替代

全过程拆换使大家能将命令的输出作为文件名传输:

while IFS= read -r line
do
  echo "$line"
done < <(cat input_file )

运用here字符串数组

Here String是Here文档的组成。该字符串数组(cat input_file )将储存回车符:

while IFS= read -r line
do
  echo "$line"
done <<< $(cat input_file )

运用文件描述符

您还可以运用文件描述符将输入发放到循环:

while IFS= read -r -u9 line
do
  echo "$line"
done 9< input_file

运用文件描述符时,挑选4到9之间数据信息,以避免与Shell内部构造文件描述符分歧。

结论

在Bash中,我们可以通过给与文件名作为while加载周而复始输入来一行行读取文件。

如果您有任何问题或意见和建议,请随时。

LINUX

Linux wc命令统计行数,单词数和字符数(linux统计行数 单词数 字符数)

2023-1-19 11:24:10

LINUX

Bash Arrays(arrays.tostring)

2023-1-19 11:29:14

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索