텍스트에서 공백 하나를 grep하는 방법은 무엇입니까?

cat a.txt| grep " " 

또는

cat a.txt| grep "\s " 

댓글

  • 두 경우 모두 cat를 많이 사용합니다. 첫 번째는 grep ' ' a.txt로 작성되고 두 번째는 유사하게 변경됩니다.
  • \s도 tab, return, 수직 탭, 용지 공급 및 기술적으로는 줄 바꿈. 공백과 탭만 일치 시키려면 [[:blank:]] 또는 [ \t]를 사용하세요.
  • gnu grep을 사용하면 일치 수를 1 개로 제한 (-m 옵션) …
  • 더 간단한 egrep " \ s " a.txt

답변

원하는 경우 질문에 입력 할 때 공백 하나만 grep하면 다음과 같이 사용할 수 있습니다.

grep -e "^\s[^\s]" -e "[^\s]\s$" -e "[^\s]\s[^\s]" a.txt 

또는 POSIX 변형 :

grep -e "^ [^ ]" -e "[^ ] $" -e "[^ ] [^ ]" a.txt 

또는 읽기가 어려운 POSIX 변형 :

grep "\(^\|[^ ]\)\ \([^ ]\|$)" a.txt 

둘 이상의 인접한 공백을 포함하는 줄을 제외하려는 경우 , 이것은 명시 적으로 하나의 공백이 있어야하며 앞에 공백이없고 뒤에 공백이 없어야합니다.

또한 grep의 모든 버전이 “\ s”정규식 컨트롤을 지원하는 것은 아닙니다.

댓글

  • 확장 정규식을 활성화하는 POSIX 지정 -E 옵션을 사용하여 마지막 예에서 모든 백 슬래시를 생략하고 가독성을 높일 수 있습니다. grep -E '(^|[^ ]) ([^ ]|$)' a.txt 어쨌든 공백 앞의 백 슬래시는 ' 필요하지 않으며 ' 마지막 닫는 괄호 앞에 하나가 없습니다. 또한, \s를 이해하는 grep 버전의 경우 공백이 아닌 [^\s]\S
  • 하지만 이것도 작동합니다. [[: blank :]]

답변

찾은 것 같습니다.

grep "\+[[:space:]]\+" a.xml 

답변

변형 2는 공백 2 개만 찾습니다. "\s" 대신 두 변형이 모두 작동합니다.

이것을 직접 쉽게 테스트 할 수 있습니다. 실제 질문은 무엇입니까?

댓글

  • 두 개의 공백 만 찾는 이유는 무엇입니까? 어떤 공간과도 일치한다고 생각합니다.
  • @Gnouc : 그가 작성한 변형 2 '\s '는 공백을 추가했기 때문에 연속으로 두 개 이상의 공백과 일치합니다. 문자 그룹 \s 뒤의 문자입니다.
  • 당신 ' 맞습니다. 저는 ' \s 뒤의 공백이 보이지 않습니다. 제 실수입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다