Answers:
grep -o -n '[{}]' <filename> | cut -d : -f 1 | uniq -c
输出将类似于:
3 1
1 2
意思是第一行出现3次,第二行出现1次。
regex因为正则表达式是简单的部分。
sort -n吗?反正不是按行号顺序出来的吗?
sort -n没有必要。谢谢。
使用grep要求吗?这是一个替代方案:
sed's / [^ {}] // g'your_file | awk'{print NR,length}'
该sed带出比其他所有的字符{和}
(即,只留下{和}字符),然后awk在每行计数字符(这仅仅是{和}字符)。要取消不匹配的行,
sed's / [^ {}] // g'your_file | awk'/./ {打印NR,长度}'
请注意,我的解决方案假定(要求)您要查找的字符串是单个字符。Moebius的答案更容易适应多字符字符串。同样,我们的答案都没有排除感兴趣的字符/字符串的引用或转义出现;例如,
{ "nullfunc() {}" }
将被认为包含四个大括号字符。
grep并不是真正的要求,这只是我开始寻找解决方案的地方,因为它给了我一些帮助。我从来不需要awk,所以如果我没有使用上面的答案,我会以此为契机进行实验-我可能仍然这样做。我未能弄清楚(但不影响任何一个答案)的是,我想每个括号运行一次脚本,以帮助我找出大多数配对在其中出现的不匹配项(在LaTeX源中,用于表格)。一行。
sed 's/{[^{}]*}//g' your_file | grep –n '[{}]',在其中sed删除(匹配的)对。如果您有嵌套对,请使用sed 's/{[^{}]*}//g;s/{[^{}]*}//g;s/{[^{}]*}//g;…' …,重复s/{[^{}]*}//g最深嵌套一次。
sort不作为的grep的输出由行号排序绝对必要的,但我想这是以前很好的做法uniq。