텍스트에서 공백 하나를 grep하는 방법은 무엇입니까?
cat a.txt| grep " "
또는
cat a.txt| grep "\s "
댓글
답변
원하는 경우 질문에 입력 할 때 공백 하나만 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
뒤의 공백이 보이지 않습니다. 제 실수입니다.
cat
를 많이 사용합니다. 첫 번째는grep ' ' a.txt
로 작성되고 두 번째는 유사하게 변경됩니다.\s
도 tab, return, 수직 탭, 용지 공급 및 기술적으로는 줄 바꿈. 공백과 탭만 일치 시키려면[[:blank:]]
또는[ \t]
를 사용하세요.-m
옵션) …