我有一个文件,我需要其中所有带有 @ 前缀的特定单词。该文件看起来像这样
@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
awk 解决方案。,@dfg
在输入中删除“@”符号之前的字符@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