我需要帮助创建一个sed命令,它会重新排列下面文件中的字段,以便它们用冒号分隔,并且它们的顺序重新排列到此state:lastName:restOfName:city
(街道地址被删除)。< / p>
Mickey Mouse, 1111 Disney Dr., Orlando FL
Minnie Mouse, 1112 Disney Dr., Anaheim CA
Adam Voter, 902 Biscayne Blvd., Miami FL
当它们完成时,它们应该看起来像这样。
FL:Mouse:Mickey:Orlando
CA:Mouse:Minnie:Anaheim
FL:Voter:Adam:Miami
这是家庭作业,我只能使用sed。
答案 0 :(得分:0)
您可以使用以下sed命令,如果您需要其他解释,请与我们联系:
sed -E -i.bak 's/^([^\s]*)\s+([^,]*),[^,]*,\s*([^\s]*)\s+([^\s]*)\s*$/\4:\2:\1:\3/g' test_add_file.in;
测试:
简而言之,您定义了sed
将用于查看文本文件以获取所需模式的正则表达式,然后使用backreferences
重用已在文件中识别的实际模式这个过程。
有关正则表达式的确切语法,请查看此链接:
http://www.rexegg.com/regex-quickstart.html
不久:
^
行开头修复模式的开头([^\s]*)
用于获取Mickey, Minnie,...
(重复0到N非空白字符,它们将在括号之间,因为它将被重新用作后面的参考\s+
Mickey and Mouse
([^,]*)
将匹配字符串的Mouse
部分(重复0到N非逗号字符),[^,]*,\s*
介于未使用的逗号, 1112 Disney Dr.,
([^\s]*)
用于获取Orlando, Anaheim
\s+
Orlando and FL
([^\s]*)
用于获取FL, CA, ...
\s*$
使用$
EOL
修复模式结尾,最后有空格然后在sed
命令的替换部分中重新排序模式,并在\4:\2:\1:\3