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