我尝试选择所有电子邮件地址,然后使用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
*注意:这些是假名,地址和电话号码。
答案 0 :(得分:3)
你可以试试这个sed命令:
sed -r "s/^([^,]+)(,[^,]+)(.*)/\1\3\2/g" address
<强>解释强>
$^([^,]+)
捕获从第一行开始到第一列逗号(即第一列)到\1
(,[^,]+)
捕获第一个逗号和所有内容,但不包括第二个逗号到\2
(即第二列,电子邮件)(.*)
将其余内容捕获到\3
\1\3\2
反向引用将列交换到括号标记的捕获组答案 1 :(得分:0)
同样你也可以用perl来做这件事。
%_Host@User:/home/Gaurava/study/temp> perl -pe 's/^(.+?),(.+?),(.+)$/$1,$3,$2/g' names.txt
Xiao Li, 6705462234, Jackson, NC 764, lxiao@unc.edu $
Elizi Moe, 5208534566, Tempe, AZ 85282, emoe@ncsu.edu $
Ma Ta, 4345667345, Austin, TX 91030, mta@yahoo.com $
Diana Cheng, 5203456789, Matitsi, WY 4587, dcheng@asu.edu $
Jackson Five, 5206564573, Kyenta, AZ 85483, jfive@ncsu.edu $
Adi Srikanth Reddy, 6578904566, Wyo, WS 67854, sadi1@imap1.asu $.edu
Natkin William, 8044344528, Richmond, VA 22345, wnatkin@imap28.asu $.edu
%_Host@User:/home/Gaurava/study/temp>