내 파일에 다음과 같은 줄이 있습니다.
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
tr
POSIXly( 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
결과를 원하는 모든 경우에 다음과 같이 grep
PCRE 지원( -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?