【发布时间】:2019-08-01 09:50:38
【问题描述】:
我想在 for 循环中获得单行 grep 结果并传递到下一个匹配项,而不需要之前的所有其他匹配项。
我尝试了下面的代码,但它没有按预期工作,因为我只想要一行结果。
$nbOfMatches=7
$className=somefile
for i in $(seq 1 $nbOfMatches);
do
lineCopy=$(grep -m $i 'private ' $className)
echo "$lineCopy"
done
当前输出:
Occurences found : 7
private $id;
private $id;
private $firstname;
private $id;
private $firstname;
private $lastname;
private $id;
private $firstname;
private $lastname;
private $email;
private $id;
private $firstname;
private $lastname;
private $email;
private $password;
private $id;
private $firstname;
private $lastname;
private $email;
private $password;
private $phone;
private $id;
private $firstname;
private $lastname;
private $email;
private $password;
private $phone;
private $address;
预期输出:
Occurences found : 7
private $id;
private $firstname;
private $lastname;
private $email;
private $password;
private $phone;
private $address;
我想知道是否有一种方法可以向 grep 添加偏移匹配,以删除之前的匹配也不会被检测到。或者是否有任何其他解决方案可以实现预期的输出。
【问题讨论】:
-
我认为你可以在没有循环的情况下做你想做的事,但我不明白你想要什么。
grep 'private ' "$className" | sort -u | head -7之类的东西? -
不循环直接尝试:
grep 'private' ${className} | uniq -
我想做的是将像``` $firstname,... ``` 这样的每个变量放在一行中,然后删除私有属性和分号以仅获取变量名称“名字”或“电子邮件”......在数组或字符串中