在bash中用单行读取文件

时间:2017-02-03 22:12:21

标签: linux bash file

我使用以下代码在bash

中逐字逐字地读取文件
hi

但是,上述代码不起作用,因为while read line; do for word in $line; do echo "word = '$word'" done done < My_File 只有一行。我该如何修改代码?

2 个答案:

答案 0 :(得分:5)

读入数组

这会将一行读入数组,拆分IFS中的字符(默认情况下为空格标签和换行符)。

read -r -a words <My_File || (( ${#words[@]} ))
for word in "${words[@]}"; do
  echo "Read word: $word"
done

||条件会阻止set -eshouldn't be using anyhow}导致脚本退出,如果没有终止换行符。

使用空格分隔符读取

请注意,只有在常规空格和其他字符分隔您的单词时,此方法才有效。如果您想要标签,请将-d ' '更改为-d $'\t'

while IFS='' read -r -d ' ' word; word=${word%$'\n'}; [[ $word ]]; do
  echo "Read word: $word"
done <My_File
如果您的文件不是完全(仅限空格分隔符)格式,

word=${word%$'\n'}会删除可能存在的任何换行符。

答案 1 :(得分:1)

您可以像这样调整代码,以便考虑没有终止换行符的行:

(cat My_File; echo ) | while read line; do
    for word in $line; do
    echo "word = '$word'"
    done
done

这将在输入结尾处添加换行符,无论My_File是否有换行符,都不会更改输出。

-Rich Alloway(RogueWave)