대문자로 시작하는 단어만 찾고 싶습니다. 연설은 이 패턴을 따라야 합니다. "어 허".
텍스트가 포함된 .txt 파일이 있습니다. 나는 성공하지 못한 채 grep을 사용해 보았습니다.
답변1
따라서 대문자 뒤에 4개의 문자가 와야 합니다. 예를 들면 다음과 같습니다.
$ cat test
lower
Upper
notrequired
This1
$ grep '[A-Z]....' test
Upper
This1
점( .
)은 개행 문자를 제외한 모든 문자와 일치합니다.
답변2
grep
비표준 -w
및 옵션을 지원 하는 경우 -o
다음을 수행할 수 있습니다.
grep -wo '[[:upper:]][[:lower:]]*'
하나의 대문자와 0개 이상의 소문자로 구성된 o
단어를 출력합니다 w
(이 경우 단어는 단어가 아닌 문자로 구분되고 단어 문자는 숫자 또는 밑줄입니다).
예를 들어 다음과 같은 입력의 경우:
Let's rock the UK, Stéphane! tEst Test2
다음과 같이 출력됩니다.
Let
Stéphane
é
단일 소문자 U+00E9 문자로 표현 하면 됩니다 . e
뒤에 U+0301과 날카로운 악센트를 결합하여 표현하면 , U+0301은 U+0301로 간주되지 않습니다 Let
.Ste
성격.
이 문제를 해결하기 위해 태그 결합을 허용할 수도 있습니다. 이 경우 다음 grep
과 같은 perl
정규식 지원이 필요합니다.
grep -Po '\G(\X*(?=[^\w])\X)?\K\p{Lu}[\p{Ll}\pM]*+(?!\w)'
어디:
\G
줄의 시작 부분이나 이전 일치 항목의 끝 부분과 일치합니다.\X
자소 클러스터와 일치하므로 분해를 허용하지 않고 기본 문자와 모든 결합 토큰(또는 더 일반적으로 분해된 문자)을 포함합니다.(?=[^\w])\X
grep -w
는 와 같은 단어를 적절하게 구분하여 예를 들어Foo
포함에서 발견된 경우 보고되지 않고éFoo
é가 로 표시 되도록 하기 위해 단어가 아닌 문자로 이어지는 문자소 클러스터입니다e<U+0301>
.\K
오른쪽에 있는 내용 만K
읽고 출력 하도록 일치 시작을 재설정합니다 . 와 함께 사용하면 일반적으로 Perl/PCRE에서 연산자를 찾는 데 고정 길이 일치가 사용된다는 사실을 해결합니다.o
\G
\K
\p{Lu}
u
POSIX' 와 동등한 perl 인 ppercaseL
etter rperty 와 문자를 일치시킵니다 .p
[[:upper:]]
\pM
M
방주 용 , 작은 캐비닛용 글자\p{Ll}
용 .l
L
*+
역추적을 비활성화하는 것과 비슷*
하지만 모든 토큰과 소문자를 영구적으로 포함하므로 토큰에 대해 걱정할 필요가 없습니다.(?!\w)
, 부정적인 전망성격. 위의 내용이 없으면 인스턴스 반환 ( as 사용)을 피해야+
합니다 .(?![\w\pM])
Fe
FéF
é
eU+0301
답변3
또한 시도
grep -o "\b[[:upper:]].*\b" file
이 -o
옵션은 발견된 일치 항목만 출력하고 \b
전체 단어만 고려 하도록 합니다 man grep
.
\b 기호는 단어 가장자리의 빈 문자열과 일치합니다.
답변4
이것은 나에게 도움이되었으며 도움이 될 수 있습니다.
for i in $(cat file); do [[ $i =~ ^[A-Z].[a-z]+$ ]] && echo $i; done