如何使用 bash 循环对文件的每一行执行某些操作?

如何使用 bash 循环对文件的每一行执行某些操作?
ckim@ckim-ubuntu:~/test$ cat tt
#define a b
#define c d
ckim@ckim-ubuntu:~/test$ for i in `cat tt`; do echo $i; done
#define
a
b
#define
c
d

$i 变量采用空格或 Enter 分隔的每个单词。如何让 $i 代表cat命令中的每一行?使用 for 或 while 对我来说都可以,这就是 bash。谢谢你!

ADD :我可以遍历该行while read line; do echo $line; done < tt,但我想为每一行做一些事情,如果我将此输出传递给 for 循环,它就会被分成每个单词。

答案1

从@glennjackman 的评论中,我学会了如何做到这一点。这就是我最初想做的(grep一个文件并提取前面的文件路径:)。

ckim@ckim-ubuntu:~/U-BOOT/u-boot$ cat tt
dir0/Kconfig:config SUPPORT_SPL
dir1/Kconfig:select SUPPORT_SPL
dir2/Kconfig:select SUPPROT SPL
ckim@ckim-ubuntu:~/U-BOOT/u-boot$ while IFS= read -r i; do echo "${i%:*}"; done < tt
dir0/Kconfig
dir1/Kconfig
dir2/Kconfig

答案2

您的添加似乎按您想要的方式工作:

#!/bin/sh
while read line; do
    echo "$line"
done < tt

输出:

#define a b
#define c d

相关内容