将路径操作到电子邮件地址

gup*_*use 2 unix grep sed

我有一个包含以下内容的文件:

./E/domainname.com/martin    
./s/domain2.com/shelly    
./E/2/4domain.com/john    
./X/another.net/gary
Run Code Online (Sandbox Code Playgroud)

我想输出:

martin@domainname.com    
shelly@domain2.com
Run Code Online (Sandbox Code Playgroud)

等等.

我一直试图通过在行中向后搜索来隔离用户名,直到我点击为止/,但到目前为止我都失败了.

Avi*_*Raj 5

您可以尝试以下sed命令.

$ sed 's~.*/\([^/]*\)/\([^/]*\)$~\2@\1~g' file
martin@domainname.com
shelly@domain2.com
john@4domain.com
gary@another.net
Run Code Online (Sandbox Code Playgroud)

说明:

  • .*/匹配从开头到/符号的所有字符(从最后一个开始的第二个正斜杠符号).
  • \(...\) 被称为捕获组,用于捕获角色.
  • [^/]*匹配任何字符,但不匹配/零次或多次.因此组合\([^/]*\)将捕获最后一个/符号之前存在的所有字符.
  • / 匹配最后一个正斜杠.
  • \([^/]*\) 捕获所有字符但不是/零次或多次进入另一个组.
  • $ 表示该行的结束.
  • 在替换部分中,反向引用捕获的组\1,\2将在相应的组内打印字符.