我的问题是逐字读取文本文件并恢复变量中的每个单词。我尝试这样做:
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.txt
ortr
或等逐行转换。sed
tr
sed
read
答案4
read -a WORDS -d "" < file.txt
for word in "${WORDS[@]}"
do
echo $word
done
选项 -a 将单词存储在数组中。
选项 -d 指定定界字符串。这告诉 read 在哪里停止处理文件。我指定了一个空字符串,它会导致读取继续,直到获得 EOF。也就是说,无论行结尾如何,都会处理整个文件。