我正在尝试选择所有电子邮件地址并使用 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/