从具有特定特殊前缀字符的文件中获取特定单词

从具有特定特殊前缀字符的文件中获取特定单词

我有一个文件,我需要其中所有带有 @ 前缀的特定单词。该文件看起来像这样

@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

相关内容