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]/'

-- Cut 命令从文件中获取第二个字段(全名) -- Sed 将名字和姓氏分开,并将电子邮件分配给姓氏

除了名称之外一切正常neil o'bryan,下面是我得到的结果

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

请帮助我如何按预期获得带有单引号的名称。即奥'[电子邮件受保护]

答案1

假设应该o'brianobrian电子邮件地址中,只需tr在管道中添加一个阶段即可删除不需要的字符:

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]/"

相关内容