Unix Sedは一重引用符をエスケープします。

Unix Sedは一重引用符をエスケープします。

私のファイルデータは次のとおりです

  1. bill johnson
  2. robert dylan
  3. neil o'bryan

要件は、姓を抽出し、@mail.comを追加することです。次のコマンドを使用しました。

cut -d"|" -f2 emp.lst | sed 's/\([a-z][a-z]*\) \([a-z][a-z]*\)/\[email protected]/'

- ファイルから2番目のフィールド(フルネーム)を取得するCutコマンド - 名前と姓を分離し、電子メールを姓に割り当てるSed

名前を除くすべてがうまくいき、neil o'bryan以下は私が得た結果です。

  1. [email protected]
  2. [email protected]
  3. [email protected]'bryan

予想通り、一重引用符で名前を取得する方法を教えてください。それだけです。[Eメール保護]

ベストアンサー1

電子メールアドレスo'brianに存在する必要があると仮定すると、不要な文字を削除するためにパイプラインにステップを追加するだけです。obriantr

cut -d "|" -f2 emp.lst |
tr -d "'" |
sed 's/\([a-z][a-z]*\) \([a-z][a-z]*\)/\[email protected]/'

削除したい他の文字に対しても同じことをしたり、別の文字に変換したりできます。

cut -d "|" -f2 emp.lst |
tr -d "'" |
tr 'åäöé' 'aaoe' |
sed 's/\([a-z][a-z]*\) \([a-z][a-z]*\)/\[email protected]/'

アドレスがアポストロフィでなければならない場合は、正規表現に追加するだけです。o'[email protected]

cut -d "|" -f2 emp.lst |
sed "s/\([a-z][a-z]*\) \([a-z]['a-z]*\)/\[email protected]/"

おすすめ記事