grep은 대문자를 찾습니다

grep은 대문자를 찾습니다

대문자로 표시된 단어가 포함된 명령문이 포함된 파일이 있습니다. 예를 들면 다음과 같습니다.

public final Foo BAR;

이러한 진술은 모두 균일하지 않습니다. 한 줄에서 대문자가 포함된 단어만 찾는 방법이 있나요? 나는 대문자가 포함된 줄을 찾는 방법을 알고 있지만 그것은 내가 원하는 것이 아닙니다. 대문자와 일치하는 단어만 원합니다. 감사해요!

답변1

실제로 -o스위치를 사용하면 GNU는 grep일치하는 것만 반환합니다. 어때요?

grep -oP "\w*[A-Z]+\w*" yourfile.txt

이 정규 표현식은 대문자가 포함된 단어와 일치합니다.어딘가에그 중에서도 반드시 시작은 아닙니다. 서로 다른 경우 필요에 맞게 조정해야 합니다.

아래에서 설명하는 것처럼 이는 가장 이식성이 뛰어난 솔루션이 아닐 수 있습니다. Perl의 이식 가능한 대안은 다음과 같습니다.

perl -nE 'say $1  while /(\w*[A-Z]+\w*)/g' yourfile.txt

답변2

sed전체 줄 대신 문자열을 반환 할 수 있습니다 .

sed 's/.*\([A-Z]*\).*/\1/g' <file>

또는

sed 's/[a-z]*\| //g' <file>

답변3

이것POSIX 기본 정규식 표준grepvim( , , 등 의 기본값 ) 및 를 less사용 하여 단어 경계를 나타냅니다. 이를 통해 문자 뒤에 공백이 오는 것은 물론 따옴표, 대시, 등호 등과 같은 영숫자가 아닌 문자도 허용됩니다. 새 줄에 각 일치 항목을 인쇄하려면 이 옵션을 사용하십시오 .sed\<\>-o

grep -o '\<[A-Z][a-z]*\>' yourfile.txt

다시 말하지만, 필요에 맞게 정규식을 변경해야 할 수도 있습니다. 숫자나 두 번째 대문자를 허용할 수도 있습니다..? 이것은 둘 다 가능합니다 ...

grep -o '\<[A-Z][a-z0-9]*[A-Z][a-z0-9]*\>' yourfile.txt

관련 정보