- ベストアンサー
aliasesファイルでメールアドレスへの変換とユーザの表示方法
- aliasesファイルの特定の行の1フィールド目をメールアドレスに変換し、2フィールド目のユーザを1フィールド目に移動することはできます。
- ただし、現在のコマンドではどのユーザのメールアドレスかわからないため、関連するユーザを同じ行に表示させることはできません。
- 希望通りになるようにするには、別の方法を考える必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
$ for USERS in `cat users`; do echo -ne "$USERS\t" grep " $USERS," aliases \ | awk '{print $1}' \ | sed 's/\(.*\)~\(.*\):/\2@\1/' done 同じファイルを何回もgrepするので無駄が多いですがいかがですか? # 読みやすくするために改行(と全角スペース)を使っています # awkのsplit()の別解としてsedに置換させてみました
その他の回答 (1)
- trapezium
- ベストアンサー率62% (276/442)
どうも。続きがあったのですね。 特定のユーザという条件が、単に,で区切られた2番目ということなら、 awk -F'[:,] *' '/~.*:/{split($1,a,"~"); printf "%s %s@%s\n",$3,a[2],a[1]}' < file そうではなく、ユーザ名に"05"が付くというのが条件であるなら、 awk -F':' '/~.*:/{split($1,a,"~"); if (match($2,"[[:alnum:]_]+05")>0) printf "%s ",substr($2,RSTART,RLENGTH); printf "%s@%s\n",a[2],a[1]}' < file みたいになると思います。切り出す条件が違うなら、正規表現"[[:alnum:]_]+05"を変更すればいいです。条件がもっと複雑なようだといろいろ試行錯誤が必要でしょうね。
お礼
ありがとうございます!! fileを domain.com~user: user01,user05,gaibu@addres,user04, としてみた所、希望通りになりました!! ありがとうございます。 しかし、自分のレベルをはるかに超える正規表現も出てきているので 理解するまでかなり時間がかかってしまいそうです。勉強します。 ちなみに、ユーザ名に関しては英数字で複雑に入る内容になるので、 "[[:alnum:]_]+05"の部分を変更する必要があると思うのですが、 以下のように複雑な条件を満たすにはどうしたらよいでしょうか あらかじめ、userファイルとして記述、もしくは$USERとして以下を定義 yoshimizu admin info_mail 上記ユーザに関連するアドレスを以下のようなaliasesから抜き出したいと思っているのです。 xxx.com~yoshimizu: ken, dan, cap@xxx.net, yoshimizu xxx.net~hage-hige: info_admin, user03, admin, xxx.jp~info: info_mail, shimizu, all-mail@xxx.jp 2フィールド目に当る、ユーザやメールアドレスのかたまりは 必ず、【 user,】「空白、ユーザ名、コンマ」という並びになっております。 ↓のような結果にしたいと思ってます。 yoshimizu yoshimizu@xxx.com admin hage-hige@xxx.net info_mail info@xxx.jp
お礼
回答ありがとうございます!! 残念ながら以下の結果になってしまいます。 [root@ドメイン]# ./aliases.sh yoshimizu admin hage-hige@xxx.net info_mail [root@ドメイン]# ユーザ名前が全部抜き出せていてメールアドレスも 作成できてます。すごい!!! もしかしたらケアレスミスがあるかもしれないので もう少し見てみます