我正在尝试选择所有电子邮件地址,并使用sed将它们移动到行尾。我已经成功地找到了如何选择电子邮件地址的方法,但是除了在末尾附加$之外,我什么也做不了-有没有办法将&(粘贴回所选单词)和$(转到行尾)运算符组合起来完成我要做的事?或者我应该找一个不同的方法?

-bash-3.2$ sed "s/[a-z]*@*\.*\.[a-z].[a-z]/& $/" address
Xiao Li, [email protected] $, 6705462234, Jackson, NC 764
Elizi Moe, [email protected] $, 5208534566, Tempe, AZ 85282
Ma Ta, [email protected] $, 4345667345, Austin, TX 91030
Diana Cheng, [email protected] $, 5203456789, Matitsi, WY 4587
Jackson Five, [email protected] $, 5206564573, Kyenta, AZ 85483
Adi Srikanth Reddy, [email protected] $.edu, 6578904566, Wyo, WS 67854
Natkin William, [email protected] $.edu, 8044344528, Richmond, VA 22345

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

最佳答案

您可以尝试此sed命令:

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

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

10-08 15:10