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