bash read循环只读取输入变量的第一行

时间:2014-01-20 06:25:42

标签: bash delimiter

我有一个读取循环,它正在读取变量,但行为不符合我的预期。我想读取变量的每一行并处理每一行。这是我的循环:

while read -r line
do
   echo $line | sed 's/<\/td>/<\/td>$/g' | cut -d'$' -f2,3,4 >> file.txt
done <<< "$TABLE"

我希望它能够处理文件的每一行,而只是处理第一行。如果我的中间只是echo $ line&gt;&gt; file.txt它按预期工作。这里发生了什么?我如何得到我想要的行为?

2 个答案:

答案 0 :(得分:0)

如果$TABLE包含多行字符串,我建议

printf '%s\n' "$TABLE" |
while read -r line; do
   echo $line | sed 's/<\/td>/<\/td>$/g' | cut -d'$' -f2,3,4 >> file.txt
done

由于'&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; here-strings的operator不是POSIX。

答案 1 :(得分:0)

您的行似乎由\r而非\n分隔。

使用此while循环使用read -d $'\r'迭代输入:

while read -rd $'\r' line; do
    echo "$line" | sed 's~</td>~</td>$~g' | cut -d'$' -f2,3,4 >> file.txt
done <<< "$TABLE"