迭代Shell中grep返回的行

时间:2013-11-22 06:24:41

标签: linux shell

假设我有一个文件info.txt。第一列是id,其余是其内容。

 1 aaa bbb
 1 ccc ddd mmm
 4 ccc eee
 7 ddd fff jjj kkk

我的数字很简单,行以“1”开头。所以我使用grep来过滤它:

what_I_concern=$(cat info.txt | grep -iw 1 | cut -d ' ' -f 2-)

然后我想迭代这些行:

 for i in $what_I_concern; do
     pass $i to another program #I want to pass one line at a time
 done

但它真正做的是迭代这些行中的每个单词,而不是将每一行作为一个整体。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您尝试完成所需内容的方式是导致分词。相反,请说:

while read -r line; do
  someprogram $(cut -d' ' -f2- <<< "$line")
done < <(grep '^1' info.txt)

<()语法称为Process Substitution。在这种情况下,它使while循环能够将grep命令的输出作为文件读取。

答案 1 :(得分:1)

在这种情况下,您可以完全避免使用grepcut(假设默认为IFS

while read -r first rest; do
    [ "$first" = "1" ] && pass "$rest" to another program; 
done < info.txt