2013-11-15 1 views

답변

2

sed 부분은 원하지 않는 문자를 제거

sed 's/[,。?]//g' file | perl -C -nle 'print length' 

시도하고 perl 부분은 나머지 문자를 계산 : 출력은 다음과 같을 것입니다.

+0

우리 둘 다'perl'을 사용했지만, 파이프 라인의 반대편에는 – jordanm

+0

옙이 있습니다. 유일한 문제는 perl이 유니 코드를 처리하는 방법을 잘 모르겠습니다. Perl 전문가가 아닙니다. –

+0

그것 [더 좋을] (http://stackoverflow.com/a/6163129/1032785) – jordanm

2

한 가지 방법은 스트림에서 해당 문자를 제거한 다음 wc -m을 사용하는 것입니다.

perl -pe 's/(\?|,|,|。)//g' file.txt | \ 
    while read -r line; do 
    printf "$line" | wc -m ; 
    done 
+1

'perl -lne 's/[?,,.//// g; print length' –

1

간단한 해결책은 this one에 접근하지만 awk 사용 :

sed 's/[?,。]//g' file | awk '{ print length($0) }' 
+0

awk는 그 대체를 할 수 있습니다 -'sed'는 필요 없습니다. 'awk '{gsub ("[?,.]", ""); 인쇄 길이()} '' –

2

이상의 단순 :

tr -d [?,,。] <file | wc -m 
3

여기 문자를 제거 펄을 사용하는 예는 순수 배쉬 용액 :

while IFS= read -r l; do 
    l=${l//[?,。]/} 
    echo "${#l}" 
done < file 
관련 문제