我有一个读取循环,它正在读取变量,但行为不符合我的预期。我想读取变量的每一行并处理每一行。这是我的循环:
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它按预期工作。这里发生了什么?我如何得到我想要的行为?
答案 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"