逐字读取文件

逐字读取文件

我的问题是逐字读取文本文件并恢复变量中的每个单词。我尝试这样做:

while read ligne; 
do {
for ( i=1; i<= length ($ligne); i++); do
 { var=$(awk '{print $i}' test.txt)}

}done < test.txt

但它不起作用,我有这个错误:

Couldn't parse this for loop

答案1

这取决于你如何定义单词。

如果单词之间由一个或多个空格分隔,您可以执行以下操作:

tr -s '[:blank:]' '[\n*]' < file |
  while IFS= read -r word; do
    : echo "$word" here
  done

A-Z如果单词是包含,a-z和的字符序列_

tr -cs 'A-Za-z_' '[\n*]' < file | ...

在历史上的 System V 系统上,您需要使用方括号[A-Za-z_]

答案2

只是

while read -ra line; 
do
    for word in "${line[@]}";
    do
        echo "$word";
    done;
done < test.txt

将逐字拆分文件。将 更改echo为您想要对单词执行的任何操作。

添加分号以便可以将其放入一行中。

答案3

您将收到由空格分隔但包含标点符号的“单词”列表:

while read -a tmp_var; 
do
    for i in "${tmp_var[@]}"
    do
        var[${#var[*]}=$i
    done
done < test.txt

但是,像往常一样,在“1 word in line”列表中,已由test.txtortr或等逐行转换。sedtrsedread

答案4

read -a WORDS -d "" < file.txt
for word in "${WORDS[@]}"
do
        echo $word
done

选项 -a 将单词存储在数组中。

选项 -d 指定定界字符串。这告诉 read 在哪里停止处理文件。我指定了一个空字符串,它会导致读取继续,直到获得 EOF。也就是说,无论行结尾如何,都会处理整个文件。

相关内容