텍스트에서 공백을 찾는 방법 grep을 사용합니까?


13

텍스트에서 한 칸 띄우는 방법?

cat a.txt| grep ' '

또는

cat a.txt| grep '\s '

7
cat두 경우 모두 무상 사용 . 첫 번째는 쓸 수 있고 두 번째는 grep ' ' a.txt비슷하게 변경되었습니다.
MadHatter

1
참고 \s또한 기술적으로, 탭, 복귀, 수직 탭, 용지 공급을 일치하고, 줄 바꿈. 공백과 탭만 일치 [[:blank:]]시키 려면 또는을 사용하십시오 [ \t].
추후 공지가있을 때까지 일시 중지되었습니다.

gnu grep을 사용하여, 당신은 일치하는 수 ( -m옵션)를 하나로 제한 할 수 있습니다 ...
sendmoreinfo

이것은 더 간단한 egrep "\ s"입니다. a.txt

답변:


6

질문에 넣을 때 한 공간 만 그 리핑하고 싶다면 다음과 같이 사용하십시오.

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'정규식 제어를 지원하지는 않습니다.


1
-E확장 된 정규식을 가능하게 하는 POSIX 지정 옵션을 사용하여 마지막 예에서 이러한 백 슬래시를 모두 생략하고 가독성을 향상시킬 수 있습니다. grep -E '(^|[^ ]) ([^ ]|$)' a.txt어쨌든 공백 앞의 백 슬래시는 필요하지 않으며 마지막 닫는 괄호 앞에 빠진 것이 있습니다. 또한,의 버전 grep이 이해 \s, 당신은 아닌 공간에 대한 표현이 단축 될 수 있습니다 [^\s]\S
추후 공지가있을 때까지 일시 중지합니다.

그러나 이것도 작동합니다. [[: blank :]]
Emax

4

내가 찾은 것 같아

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

1

변형 2는 두 개의 공백 만 찾습니다. 당신이 사용하는 경우 '\s'대신, 두 변종 작동합니다.

당신은 이것을 쉽게 테스트 할 수 있으므로 실제 질문은 무엇입니까?


1
두 개의 공백 만 찾는 이유는 무엇입니까? 나는 그것이 어떤 공간과도 일치한다고 생각합니다.
cuonglm

1
@Gnouc : Variant 2 '\s '는 문자 그룹 뒤에 공백 문자를 추가했기 때문에 행에서 두 칸 이상 일치 \s합니다.
Sven

네 말이 맞아, 난 뒤에 공백이 보이지 않아 \s내 실수.
cuonglm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.