태그 주변의 단어를 grep하세요.

태그 주변의 단어를 grep하세요.

내 파일에 다음과 같은 줄이 있습니다.

This is one word1:word2 of the lines    
This is another word3:word4 of the lines    
Line without a match    
Yet another line word5:word6 for test

:전후의 단어를 grep하고 반환해야 합니다 :.

위의 줄을 greping하여 얻어야 하는 출력은 다음과 같습니다.

word1:word2
word3:word4
word5:word6

답변1

GNU 사용 grep:

start cmd:> echo "This is one word1:word2 of the lines" |
  grep -Eo '[[:alnum:]]+:[[:alnum:]]+'
word1:word2

start cmd:> echo "This is one wordx:wordy of the lines" |
  grep -Eo '[[:alpha:]]*:[[:alpha:]]*'
wordx:wordy

start cmd:> echo "This is one wo_rdx:wo_rdy of the lines" |
  grep -Eo '[[:alpha:]_]*:[[:alpha:]_]*'
wo_rdx:wo_rdy

답변2

trPOSIXly( GNU와 같은 일부 구현에서는 멀티바이트 문자를 올바르게 처리하지 못한다는 점에 유의하세요 ).

tr -s '[:space:]_' '[\n*]' << 'EOF' |
  grep -xE '[[:alnum:]_]+:[[:alnum:]_]+'
This is one word1:word2 of the lines and another is word:word   
This is another word3:word4 of the lines  and this is not wordnot::wordnot
Line without a match    
Yet another line word5:word6 for test
This is one wo_rdx:wo_rdy of the lines
This is one wordx:wordy of the lines
not/a:match
EOF

다음을 제공합니다:

word1:word2
word:word
word3:word4
word5:word6
rdx:wo
wordx:wordy

답변3

결과를 원하는 모든 경우에 다음과 같이 grepPCRE 지원( -P) 및 해당 단어 정규 표현식( )과 함께 GNU를 사용할 수 있습니다.\w

grep -oP '\w+:\w+' file

입력 파일:

This is one word1:word2 of the lines and another is word:word   
This is another word3:word4 of the lines  and this is not wordnot::wordnot
Line without a match    
Yet another line word5:word6 for test
This is one wo_rdx:wo_rdy of the lines
This is one wordx:wordy of the lines

산출:

word1:word2
word:word
word3:word4
word5:word6
wo_rdx:wo_rdy
wordx:wordy

보시다시피, 자체 사이에 추가 콘텐츠가 있기 grep때문에 패턴과 일치하지 않습니다 wordnot::wordnot.:

답변4

grep을 통해,

grep -oP '[^:\s]+:[^:\s]+' file

또는

grep -oP '\S+?:\S+' file

위 명령은 문자열을 가져올 뿐만 foo:bar아니라?foo:bar?

관련 정보