2つの異なる区切り文字でcut / awk / sedを使用する

2つの異なる区切り文字でcut / awk / sedを使用する

以下の場合があります。

 [email protected]
 [email protected]
 [email protected]

私はこれを次に変換しようとしています。

 [email protected]
 [email protected]
 [email protected]

したがって、最初の「_」(含む)から@(除外)まですべての項目を削除する必要があります。

何かが、実際には動作しません。

このスレッドに基づいて:一度に 2 つの区切り記号に基づいて切り取り、そしてこのU&L Q&A:区切り文字の最初の出現に文字列を分割する

sed 's/^.*_\([^ ]*\) .*\@\([^$]*\)$/\1 \2/' infile

しかし幸運はありません。ベルを鳴らしたい人はいますか?

ベストアンサー1

正確に何をしているのかわかりませんが、次のことができますsed

$ sed 's/\(case\).*\(@test.com\)/\1\2/' 87529.txt 
[email protected]
[email protected]
[email protected]

caseこれにより、との間のすべての内容が効果的に整理されます@

次のようにすることができますawk

$ awk -F@ '{split($1,a,"_"); print a[1]"@"$2}' 87529.txt 

次の方法で行うこともできますperl(evisoupの方法に似ています)。

$ perl -p -e 's/_.*@/@/g' 87529.txt 

またはあなたは使用することができますperl未来志向の施設:

$ perl -p -e 's/_.*(?=@)//g' 87529.txt 

メモ:LookaheadとLookbehindを使用すると、正規表現perlで実行される操作に文字列を含めず、一致させる正規表現パターンに文字列を含めることができます。カラット(^) - 行の始まりとドル($) - 行の終わりの動的バージョンだと思います。@削除してからもう一度追加するよりも少し面倒です。

おすすめ記事