Bash 如何将grep重定向到while循环

Bash 如何将grep重定向到while循环,bash,while-loop,grep,Bash,While Loop,Grep,嗨,我有下面的bash脚本代码 group2=0 while read -r line do popAll=$line | cut -d "{" -f2 | cut -d "}" -f1 | tr -cd "," | wc -c if [[ $popAll = 0 ]]; then group2 = $((group2+2)); else group2 = $((group2+popAll+1)

嗨,我有下面的bash脚本代码

group2=0
    while read -r line
    do
      popAll=$line | cut -d "{" -f2 | cut -d "}" -f1 | tr -cd "," | wc -c
        if [[ $popAll = 0 ]]; then
          group2 = $((group2+2)); 
        else
          group2 = $((group2+popAll+1));
        fi
    done << (grep -w "token" "$file")
group2=0
而read-r行
做
popAll=$line | cut-d“{”-f2 | cut-d“}”-f1 | tr-cd“,”wc-c
如果[$popAll=0]];然后
组2=$((组2+2));
其他的
group2=$((group2+popAll+1));
fi

完成问题在这一行:

done << (grep -w "token" "$file")
#    ^^

但是请注意,您还需要检查许多其他事项。有关讨论,请参阅注释,有关详细信息,请粘贴代码。另外,通过指示一些示例输入和所需的输出,我确信我们可以找到更好的方法。如果将管道移动到while前面,则

会起作用:
grep-w“token”“$file”
…@amdixon,但是您正在子shell中运行所有内容,这可能会导致问题。删除空格
完成所需的行是什么样子的?有比巨大的管道更有效的方法来获得你想要的子字符串的长度。谢谢大家的评论@chepner:文件中包含单词“token”的每一行的格式都是“token{a,b,…}”。我想得到他的行并计算每个{}中元素的数量。所以我计算了逗号的数量,谢谢你的回答。这起作用了。你能给我解释一下这背后的理论吗?另外,我现在得到:“/parsingTrace:line 151:group2:command not found”,第151行是“group2=$((group2+popAll+1));这是因为行
popAll=$line | cut-d{“-f2 | cut-d}”-f1 | tr cd“,| wc-c
,这是错误的。你需要指出你想在这里做什么,并给出一些例子。文件中每一行有“token”一词,格式是“token{a,b,…}”。我想得到他的行并计算每个{}中元素的数量。所以我计算逗号的数量essentially@KKK然后你可能想说
popAll=$(echo“$line |…)
。另外,你说的是
if[[$popAll=0]
,但对于整数,我们需要
-eq
进行比较:
if[[$popAll”-eq 0]]
…非常感谢…你解决了我所有的问题。我是推进bash脚本的新手。有什么好方法可以加速知识的学习吗?
done << (grep -w "token" "$file")
#    ^^
done < <(grep -w "token" "$file")
#    ^ ^