• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:aliasesの1フィールド目をメールアドレスへ変換して2フィールド目も表示する)

aliasesファイルでメールアドレスへの変換とユーザの表示方法

このQ&Aのポイント
  • aliasesファイルの特定の行の1フィールド目をメールアドレスに変換し、2フィールド目のユーザを1フィールド目に移動することはできます。
  • ただし、現在のコマンドではどのユーザのメールアドレスかわからないため、関連するユーザを同じ行に表示させることはできません。
  • 希望通りになるようにするには、別の方法を考える必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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に置換させてみました

r-linux
質問者

お礼

回答ありがとうございます!! 残念ながら以下の結果になってしまいます。 [root@ドメイン]# ./aliases.sh yoshimizu admin hage-hige@xxx.net info_mail [root@ドメイン]# ユーザ名前が全部抜き出せていてメールアドレスも 作成できてます。すごい!!! もしかしたらケアレスミスがあるかもしれないので もう少し見てみます

その他の回答 (1)

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.1

どうも。続きがあったのですね。 特定のユーザという条件が、単に,で区切られた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"を変更すればいいです。条件がもっと複雑なようだといろいろ試行錯誤が必要でしょうね。

r-linux
質問者

お礼

ありがとうございます!! 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

関連するQ&A