在 Bash 中逐行读取文件
您可能会发现您需要使用 shell 脚本逐行读取文件。
在本教程中,我将介绍在 Bash 脚本中逐行读取文件的多种方法。
在 bash 中逐行读取文件
在本教程中,我将引导您完成两种编写 bash 脚本的方法,通过该脚本您可以逐行读取文件:
- 在 while 循环中使用 read 命令
- 将 cat 命令与 while 循环结合使用
为了便于理解,我将使用一个名为的简单文本文件,LHB.txt
其中包含以下内容:
1. Ubuntu
2. Arch
3. openSUSE
4. Fedora
5. Slackware
1. 使用 while 循环读取命令
正如方法名称所示,在这里,我将使用bash 脚本中的 while 循环中的read 命令。
首先,使用以下命令创建并打开一个简单的脚本文件:
nano read.sh
并粘贴以下几行(稍后将解释):
#!/bin/bash
file="LHB.txt"
while read -r line; do
echo -e "$line\n"
done <$file
这里,
file="LHB.txt"
:显示我想要处理的文件,在我的情况下是LHB.txt。while read -r line; do
:启动 while 循环并逐行读取,直到没有行可读,并且标志-r
将阻止行内的反斜杠转义。echo -e "$line\n"
:将打印每一行,并且每行之间由一个空行分隔。done < "$file"
:它将指定文件的输入重定向到 while 循环。
完成后,保存更改并退出 nano文本编辑器。
使用 chmod 命令使脚本可执行,如下所示:
chmod +x read.sh
最后,执行脚本:
./read.sh
2. 在 while 循环中使用 cat 命令
在这种方法中,我将使用 cat 命令来读取文件,这将使循环逻辑变得简单易懂。
这是我将使用的脚本:
#!/bin/bash
cat LHB.txt | while IFS= read -r line; do
echo "$line"
echo # Print a blank line
done
这里,
cat LHB.txt |
:读取文件的文件内容LHB.txt
并将其传递给管道的另一个参数。while IFS= read -r line; do
:它逐行读取文件LHB.txt
并使用 IFS 来保留前导和尾随空格。echo "$line"
:打印存储在变量中的行line
。
一旦执行上述命令,您将得到以下结果:
免费学习 bash
如果您刚刚起步或者想要复习基础知识,我们为您准备了专门的系列文章: