バックスラッシュで区切られた2つのフィールドを交換し、at記号で区切られたフィールドを出力する方法は?

バックスラッシュで区切られた2つのフィールドを交換し、at記号で区切られたフィールドを出力する方法は?

元のファイルには、次の形式の電子メールアドレスが含まれています。

domain.com\first.lastname

sed私はバックスラッシュを記号に変えました@

domain.comそしてフィールドを交換するためにさまざまな提案を試しましたfirst.lastname

sed 's/\(.*\) \@ \(.*\)/\2 - \1/' memberfile
sed -e 's/\(.*\)\s\(.*\)/\2 \1/' memberfile
sed -r 's/([a-zA-Z0-9]+) \- ([a-zA-Z0-9])*/\2 \- \1/' memberfile

上記の内容はすべて表示するためのものです[email protected]。私はsedに初めて触れました!

答え1

この試み:

sed 's/\(.*\)\\\(.*\)/\2@\1/' memberfile

これは、ファイルがまだ元のスラッシュで区切られた形式であると仮定します。 @で区切られた形式の場合は、以下を試してください。

sed 's/\(.*\)@\(.*\)/\2@\1/' memberfile

答え2

sed/regex を使用しない他の方法:

awk -F\\ '{print $2"@"$1}' memberfile

または

cut -d\\ -f1 memberfile | paste -d@ memberfile - | cut -d\\ -f2

関連情報