我有一个包含以下内容的文件:
./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)
等等.
我一直试图通过在行中向后搜索来隔离用户名,直到我点击为止/,但到目前为止我都失败了.
您可以尝试以下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将在相应的组内打印字符.