파일이 있는데 @라는 접두사가 붙은 특정 단어가 모두 필요합니다. 파일은 다음과 같습니다
@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
어크 솔루션. ,@dfg
input 에서 "@" 기호 앞의 문자를 제거하면 @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