특정 특수 접두사 문자가 있는 파일에서 특정 단어 가져오기

특정 특수 접두사 문자가 있는 파일에서 특정 단어 가져오기

파일이 있는데 @라는 접두사가 붙은 특정 단어가 모두 필요합니다. 파일은 다음과 같습니다

@abc fffg, @bcdg pnkout , @ghj sms , @yth txt= 5 ,@dfg call.

파일에 더 유사한 줄이 있습니다. 출력은 다음과 같아야합니다

@abc
@bcdg 
@ghj
@yth
@dfg
... 

모두 새로운 라인으로 교체되었습니다.

답변1

grep -Po '(^|\W)\K@\w+' inputfile
@abc
@bcdg
@ghj
@yth
@dfg

답변2

어크 솔루션. ,@dfginput 에서 "@" 기호 앞의 문자를 제거하면 @dfg끝 부분에서 구두점을 제거해야 하는 경우 쉽게 정렬할 수 있습니다.

 ~$> echo '@abc fffg, @bcdg pnkout , @ghj sms , @yth txt= 5 ,@dfg call.' |
> awk 'BEGIN { RS="[[:space:]]+" } /^[^[:alnum:]]*@.*/ { sub("^[^@]*", ""); print }'
@abc
@bcdg
@ghj
@yth
@dfg

그리고 읽기도 더 편하고...

# split records on, and clear all spaces etc.
BEGIN { RS="[[:space:]]+" } 

# matching any record that has an '@' in, without letters before it
/^[^[:alpha:]]*@.*/ { 
    # strip before '@'
    sub("^[^@]*", "")
    # remove non-letters at end if needed
    # sub("[^[:alpha:]]*$", "")
    print 
}

답변3

다음은 동일한 목적을 달성하기 위해 sed awk oneliner의 조합을 사용합니다. 그것을 테스트했고 훌륭하게 작동합니다. 질문이 있으시면 알려주세요.

주문하다

echo "@abc fffg, @bcdg pnkout , @ghj sms , @yth txt= 5 ,@dfg call." | sed "s/,/\n/g"| awk '{print $1}'

산출

@abc
@bcdg
@ghj
@yth
@dfg

관련 정보