这就是我正在运行的
grep -o ',[tcb],' <<< "r,t,c,q,c b,b,"
输出
,t,
,b,
但我想得到
,t,
,c,
,b,
(我不希望b没有前面的,或者没有尾随的c匹配)
因为,[tcb]应该在'r',t,“c,qb,b,''r,t”,c,“qb,b,'和'r,t,c,qb中找到“b”,“
但似乎当第一个模式匹配中包含,那么grep在模式匹配的第二个实例中不会查找这个
有没有办法绕过这个或者grep并不意味着这样做
答案 0 :(得分:3)
您可以使用awk
代替grep
,记录分隔符为逗号:
awk -v RS=, '/^[tcb]$/{print RS $0 RS}' <<< "r,t,c,q,c b,b,"
,t,
,c,
,b,
答案 1 :(得分:2)
您可以将grep
与Perl
RE一起使用,这样可以使用非捕获的后视和前瞻模式来提取逗号所包围的字母。然后,您可以按照以下方式恢复分隔符:
grep -o -P '(?<=,)[tcb](?=,)' <<< "r,t,c,q,c b,b,"|while read c; do echo ",$c,"; done
答案 2 :(得分:1)
awk解决方案很好。我有另一个用sed + grep:
echo "r,t,c,q,c b,b," | sed "s/,/,,/g" | grep -o ',[tcb],'
,t,
,c,
,b,