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
。