linux - 尝试使用 sed 将单词移动到行尾

标签 linux bash shell sed scripting

我正在尝试选择所有电子邮件地址并使用 sed 将它们移动到行尾。我已经成功地找到了如何选择电子邮件地址,但除了将 $ 附加到末尾之外别无他法 - 有没有办法将 &(粘贴回所选单词)和 $(转到行尾) 运营商来完成我想要做的事情?还是我应该寻找其他方法?

-bash-3.2$ sed "s/[a-z]*@*\.*\.[a-z].[a-z]/& $/" address
Xiao Li, lxiao@unc.edu $, 6705462234, Jackson, NC 764
Elizi Moe, emoe@ncsu.edu $, 5208534566, Tempe, AZ 85282
Ma Ta, mta@yahoo.com $, 4345667345, Austin, TX 91030
Diana Cheng, dcheng@asu.edu $, 5203456789, Matitsi, WY 4587
Jackson Five, jfive@ncsu.edu $, 5206564573, Kyenta, AZ 85483
Adi Srikanth Reddy, sadi1@imap1.asu $.edu, 6578904566, Wyo, WS 67854
Natkin William, wnatkin@imap28.asu $.edu, 8044344528, Richmond, VA 22345

*注意:这些是虚假的姓名、地址和电话号码。

最佳答案

你可以试试这个 sed 命令:

sed -r "s/^([^,]+)(,[^,]+)(.*)/\1\3\2/g" address

解释

  • $^([^,]+) 捕获从行首到但不包括第一个逗号(即第一列)的所有内容到 \1<
  • (,[^,]+) 将第一个逗号和直到但不包括第二个逗号的所有内容捕获到 \2 中(即第二列,电子邮件)
  • (.*) 将其余部分捕获到 \3
  • 然后使用 \1\3\2 向括号标记的捕获组的反向引用交换列

关于linux - 尝试使用 sed 将单词移动到行尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42169564/

相关文章:

linux - Intel x86与x64系统调用

linux - 在线 Linux Bash 演示

linux - Subversion 的预提交 Hook 失败

arrays - Bash:无法在管道右侧构建数组

linux - 如何以优化的方式用多行替换exec文件中的字符串

linux - 在 Mono 上运行 .Net MVC5 应用程序

Linux 命令中的命令

linux - 替换第一个登录行(linux bash)

linux - 将文本文件中的数字与另一个文本文件中的数字列表进行比较

shell - 如何将文本与扩展变量组合成 Fish 中的变量扩展