답변:
grep -o -n '[{}]' <filename> | cut -d : -f 1 | uniq -c
출력은 다음과 같습니다.
3 1
1 2
첫 번째 줄에서 3 번, 두 번째 줄에서 1 번을 의미합니다.
/programming//a/15366097/3378354 에서 가져 왔습니다 .
regex
정규식이 쉬운 부분이기 때문에 아마도 태그가 지정되지 않았습니다 .
sort -n
가요? 어쨌든 그것은 라인 번호 순서로 나오지 않습니까?
sort -n
필요하지 않습니다. 감사.
다양한 솔루션을 읽은 후에는 이것이 문제에 대한 가장 쉬운 접근법이라고 생각합니다.
while read i; do echo $i |grep -o "matchingString"| wc -l; done < input.txt
grep -o "matchingString" <<< $i | wc -l
.
grep
요구 사항을 사용 하고 있습니까? 대안은 다음과 같습니다.
sed 's / [^ {}] // g'your_file | awk '{인쇄 NR, 길이}'
sed
이외의 모든 문자 밖으로 스트립 {
과 }
(즉, 만 떠나 {
와 }
다음 문자) 및 awk
(단지입니다 각 라인에서 카운트를 문자 {
및 }
문자). 일치하지 않는 줄을 표시하지 않으려면
sed 's / [^ {}] // g'your_file | awk '/./ {인쇄 NR, 길이}'
내 솔루션은 찾고있는 문자열이 단일 문자라고 가정합니다 (필수). Moebius의 답변은 여러 문자 문자열에보다 쉽게 적용 할 수 있습니다. 또한, 우리의 답변 중 어느 것도 관심있는 문자 / 문자열의 인용되거나 이스케이프 된 발생을 배제하지 않습니다. 예를 들어
{ "nullfunc() {}" }
4 개의 중괄호 문자를 포함하는 것으로 간주됩니다.
grep
실제로 요구 사항은 아니었고 솔루션을 찾기 시작한 곳이었습니다. 나는 awk가 필요하지 않았으므로 위의 대답을 실험 기회로 사용하지 않았다면 여전히 그렇습니다. 내가 분명히하지 못했지만 (두 대답에 영향을 미치지 않음) 대괄호 당 한 번 스크립트를 실행하여 대부분의 쌍이 발생하는 불일치 (LaTeX 소스, 여기 표)를 추적하는 데 도움이되고 싶었습니다. 한 줄.
sed 's/{[^{}]*}//g' your_file | grep –n '[{}]'
하려면 sed
스트립과 일치하는 쌍이 있는 곳 과 같은 것을 시도해 볼 수 있습니다 . 중첩 쌍이있는 경우을 사용 하여 가장 깊은 중첩만큼 sed 's/{[^{}]*}//g;s/{[^{}]*}//g;s/{[^{}]*}//g;…' …
반복합니다 s/{[^{}]*}//g
.
sort
GREP의 출력 라인 번호를 기준으로 정렬됩니다로 꼭 필요한 것은, 그러나 나는 전에 좋은 방법 같아요uniq
.