텍스트의 공백을 계산하는 방법은 무엇입니까?

텍스트의 공백을 계산하는 방법은 무엇입니까?

다음 예에서는 inet 앞에 공백 4개가 옵니다.

wolf@linux:~$ ip address show eth0 | grep 'inet '
    inet 10.10.10.10/24 brd 10.10.10.255 scope global dynamic eth0
wolf@linux:~$ 

이 예처럼 공백 수를 어떻게 계산할 수 있습니까?

예제는 공백이 4개뿐이므로 간단합니다.

더 많은 것이 있다면 어떨까요? 수백, 수천?

찾을 수 있는 단축키가 있나요?

답변1

tr사용 하려는 문자가 아닌 모든 항목을 제거 할 수 있습니다 wc.

ip address show eth0 | grep 'inet ' | tr -d -c ' ' | wc -m

이는 많은 양의 텍스트에 맞게 확장되며 tr매우 효율적입니다.

그러나 trGNU 를 포함한 일부 구현 에서는 tr단일 바이트 문자(예: 공백 문자)만 사용할 수 있습니다.

선행 공백만 계산하려면 다음보다 더 강력한 것이 필요합니다 tr.

ip address show eth0 | grep 'inet ' | sed 's/[^ ].*$//' | tr -d '\n' | wc -m

이렇게 하면 선행 공백을 포함하지 않는 각 줄의 모든 부분이 제거되고 개행 문자와 개수가 제거됩니다.

바라보다각 줄의 특정 문자 수를 계산하는 방법은 무엇입니까?행당 개수에 관심이 있는 경우

답변2

각 줄 시작 부분의 공백 문자 수를 계산하려면 다음을 수행할 수 있습니다.

awk -F '[^ ].*' '{print length($1)}'

공백이 아닌 문자로 시작하는 일련의 문자로 필드가 구분되는 첫 번째 필드의 길이(문자)를 인쇄합니다.

입력 줄의 시작 부분에서 발견된 최대 공백 양(최대 들여쓰기)을 보고하려면 GNU를 사용하십시오 wc.

sed 's/[^[:blank:]].*//' | wc -L

보고된 공백의 양은 다음과 같습니다.디스플레이 너비8열 탭 정지가 있는 디스플레이 장치에서:

$ printf '\tfoo\n' | sed 's/[^[:blank:]].*//' | wc -L
8
$ printf '\u3000foo\n' | sed 's/[^[:blank:]].*//' | wc -L
2

U+3000 문자(내 로케일에서는 공백으로 분류된 표의 문자 공백 문자)는 UTF-8로 인코딩된 3바이트 이중 너비 문자입니다.

문자로 보고되는 최대 길이를 원하는 경우:

sed 's/[^[:blank:]].*//;s/./x/g' | wc -L

( s/./x/g각 줄의 각 문자를 x표시 너비가 1인 문자로 변환합니다.)

또는 바이트 단위:

sed 's/[^[:blank:]].*//' |
  LC_ALL=C tr -c '\n' '[x*]' | # convert each byte other than newline to x
  wc -L

답변3

  • 선행 공백 수를 인쇄합니다.

    awk '{print match($0,/[^ ]|$/)-1}' file
    

    match($0,/[^ ]|$/)공백이 아닌 첫 번째 ( [^ ]) 또는 줄 끝 ( $)과 일치하고 해당 위치를 반환합니다.

  • 공백 수를 인쇄합니다.

    awk -F '[ ]' '{print (NF?NF-1:0)}' file
    

    -F '[ ]'필드 구분 기호를 공백으로 설정합니다. NF필드의 수입니다. 삼항 표현은 "NF가 0이 아니면 NF-1을 인쇄하고 그렇지 않으면 0을 인쇄합니다"를 의미합니다. 행이 비어 있으면 NF는 0이 되기 때문입니다.

답변4

나는 다음과 같은 예를 들었습니다.

`echo "      praveen"| grep -o "^ *"| awk '{print length($0)}'`6

output

6

파이썬

>>> a="      praveen"
>>> import re
>>> k=re.compile(r'^ *')
>>> m=re.search(k,a)
>>> print len(m.group())
6
>>> 

관련 정보