linux - 提取域然后使用 sed/awk/grep/perl 粘贴到同一行

标签 linux database perl awk sed

不久前我开始了我的技术冒险 - 正如您从问题中感受到的那样 - 但现在我被困住了,因为在几乎一整天的思考和搜索之后我不知道我的问题的正确解决方案。

简而言之,我得到了一个包含电子邮件和名字的数千行文件。问题是我真的需要另一列仅包含域名本身,例如在电子邮件地址旁边。请看下面的例子。

现在是这样的:


    something@nothing.tld|:|george|-|
    anything@another.tld|:|thomas|-|
    third@address.tld|:|kelly|-|

我想要的样子:


    something@nothing.tld|:|nothing.tld|--|george|-|
    anything@another.tld|:|another.tld|--|thomas|-|
    third@address.tld|:|address.tld|--|kelly|-|

我最好的猜测是使用 sed 启动进程并提取域,但我如何才能将提取的域粘贴到我卡住的同一行中。


    sed -e 's/.*@\(.*\)|:|*/\1/'

如果您还可以给出一个简短的解释以及一个真正有帮助的解决方案。

感谢任何帮助。

最佳答案

如果在名为 file1 的文件中有以下数据,

 something@nothing.tld|:|george|-|
 anything@another.tld|:|thomas|-|
 third@address.tld|:|kelly|-|

可以使用:@作为分隔符,使用awk在其后添加数据,然后保存到新文件中,

awk -F '[@:]' '{ print $1"@"$2 ":|" $2"--" $3 }' file1 > file2

以上命令将以下数据保存在名为 file2 的文件中,

something@nothing.tld|:|nothing.tld|--|george|-|
anything@another.tld|:|another.tld|--|thomas|-|
third@address.tld|:|address.tld|--|kelly|-|

关于linux - 提取域然后使用 sed/awk/grep/perl 粘贴到同一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50093390/

相关文章:

linux - 使用 sed 将 grep 的结果添加到文件的第二行

linux - 基于虚拟盒的嵌入式 Linux 开发

android - 访问数据库 RECEIVE_BOOT_COMPLETED

php - 将 XML 导入 MySQL 数据库

perl - 如何查找数组是否具有列表中未找到的值

linux - 屏幕距离不好

reactjs - 如何使用 HTTPS 启动 React 项目

python - 从字符串用户输入Python创建类的对象

perl - 在 Perl 中对范围运算符 (..) 的结果调用 'scalar'

bash - 如何递增字符串中的最后一个数字;狂欢