• 締切済み

sedコマンドを使用して、文字の置換を行いのですが助けてください。

sedコマンドを使用して、文字の置換を行いのですが助けてください。 sedコマンドやawkコマンドなどを使って、aliasesファイルの置換を行いたいのですが、 うまくいかないので教えていただけないでしょうか? 知りたいのは、次のような置換を一括で行うことのできるコマンドです。 ■置換前のファイル ================= AAAA:  :include:/file/name BBBB:  :include:/file/name CCCC:  :include:/file/name ================= ■置換後のファイル(希望する置換結果) ※1フィールド目の任意の文字列をメールアドレスのローカルパートとして利用したい ================= AAAA:  AAAA@example.com BBBB:  BBBB@example.com CCCC:  CCCC@example.com ================= 以上です。

みんなの回答

  • cynthia4
  • ベストアンサー率51% (186/358)
回答No.4

知恵袋に同じ質問をされていますが。 一概に否定はしないのですが 大部分の人は、片方がおろそかになっています。 貴方も御多分に漏れず、そうなっています。 知恵袋では、回答後すぐに返事を出していますが こちらは、音沙汰無しです。 マナーや節操の無い事は止めて下さい。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

「うまくいかない」とは, どのようにしたら何がどう「うまくいかない」のでしょうか? それを書いた方が早いかもしれませんよ. sed なら s/^([^:]*):.*/\1: \1@example.com/ のような感じかな. ああ, 正規表現はものによって違うことがあるのでその辺は勝手に直すこと.

loooloololo
質問者

お礼

ご連絡が遅くなり申し訳ありません。ご教授いただきありがとうございます。とても参考になりました。

回答No.2

sコマンドの置換前正規表現において、 メールアドレスの一部として利用したい部分を「\(」「\)」で囲み、 それを置換後文字列上で「\1」で2回引用します。 >cat input.txt AAAA:  :include:/file/name BBBB:  :include:/file/name CCCC:  :include:/file/name >sed -e 's/^\([-_.A-Za-z0-9][-_.A-Za-z0-9]*\).*$/\1: \1@example.com/' input.txt AAAA: AAAA@example.com BBBB: BBBB@example.com CCCC: CCCC@example.com メールアドレスのローカルパートを表す正規表現「[-_.A-Za-z0-9][-_.A-Za-z0-9]*」は、 実際に来る可能性のある文字を網羅するように調整する必要があります。

loooloololo
質問者

お礼

ご連絡が遅くなり申し訳ありません。ご教授いただきありがとうございます。とても参考になりました。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

awkが良いでしょうね。 コメント行などはそのまま残すとして、 awk -F: '/^[a-z]/{print $1 ":" $1 "@example.com";next}{print}'

loooloololo
質問者

お礼

ご連絡が遅くなり申し訳ありません。ご教授いただきありがとうございます。とても参考になりました。