特定の特殊プレフィックス文字を持つファイルから特定の単語を取得する

特定の特殊プレフィックス文字を持つファイルから特定の単語を取得する

ファイルがありますが、@というプレフィックスが付いた特定の単語がすべて必要です。ファイルは次のとおりです

@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

関連情報