如何循环遍历每行包含 * 的文件中的行

如何循环遍历每行包含 * 的文件中的行

我有一个包含大约 800 行的文件。所有行都包含 1 个 * 字符。

我需要循环遍历文件中的行,因此我使用了以下简单的 for 循环

for i in $(cat file_path); do echo $i; done

不幸的是它没有起作用。

当我尝试使用其他文件但文件中的行不包含 * 字符时,循环工作正常。

我该如何解决这个问题?

答案1

您的代码存在一些问题:

您可以使用while循环来修复它们:

while IFS= read -r line <&3; do
  { printf '%s\n' "$line"; } 3<&-
done 3< file

[ -z "$line" ] || printf %s "$line"

需要注意的是使用 while 循环处理文本文件被认为是不好的做法在 POSIX shell 中。

答案2

您可以使用while

while read line; do echo "$line"; done < test.txt

或定义单独的字符IFS

SAVEIFS=$IFS; IFS="\n"; for i in $(cat test.txt); do echo "$i"; done; IFS=$SAVEIFS

答案3

您必须使用以下格式:

#!/bin/bash
SAVEIFS=$IFS
while IFS= read -r line <&3
do
    echo "$line"
done 3< myfile.txt
IFS=$SAVEIFS

测试是:

root@debian:/home/mohsen/test/shell# ./linebylibe.sh 
ff
dd
gg
tt
tt
ww
ee

我的 myfile.txt 是:

root@debian:/home/mohsen/test/shell# cat myfile.txt 
ff
dd
gg
tt
tt
ww
ee

相关内容