Bash 使用sed重新排列和删除字段
我需要帮助创建一个sed命令,该命令将重新排列下面文件中的字段,以便用冒号分隔这些字段,并将它们的顺序重新排列为:Bash 使用sed重新排列和删除字段,bash,sed,Bash,Sed,我需要帮助创建一个sed命令,该命令将重新排列下面文件中的字段,以便用冒号分隔这些字段,并将它们的顺序重新排列为:状态:lastName:restOfName:city(街道地址被删除) 米老鼠,1111迪斯尼博士,佛罗里达州奥兰多 米妮·穆斯,1112迪斯尼博士,加利福尼亚州阿纳海姆 亚当选民,佛罗里达州迈阿密比斯坎大道902号 完成后,它们应该是这样的 FL:鼠标:米奇:奥兰多 CA:老鼠:米妮:阿纳海姆 佛罗里达州:投票人:亚当:迈阿密 这是家庭作业,我只能使用sed。您可以使用以下s
状态:lastName:restOfName:city
(街道地址被删除)
米老鼠,1111迪斯尼博士,佛罗里达州奥兰多
米妮·穆斯,1112迪斯尼博士,加利福尼亚州阿纳海姆
亚当选民,佛罗里达州迈阿密比斯坎大道902号
完成后,它们应该是这样的
FL:鼠标:米奇:奥兰多
CA:老鼠:米妮:阿纳海姆
佛罗里达州:投票人:亚当:迈阿密
这是家庭作业,我只能使用sed。您可以使用以下sed命令,如果您需要更多说明,请告诉我:
sed -E -i.bak 's/^([^\s]*)\s+([^,]*),[^,]*,\s*([^\s]*)\s+([^\s]*)\s*$/\4:\2:\1:\3/g' test_add_file.in;
测试日期:
简而言之,您需要定义一个正则表达式,sed
将用于查找文本文件以获取所需的模式,然后使用backreferences
重用在该过程中识别的实际模式
有关正则表达式的确切语法,请参见以下链接:
很快:
行的开头,以修复图案的开头^
用于获取您的([^\s]*)
(重复0到N个非空字符,这些字符将位于括号之间,因为这将被重新用作back refMickey,Minnie,
米老鼠和鼠标之间有一个或多个空格\s+
将匹配字符串的([^,]*)
鼠标部分(重复0到N个非逗号字符)
两个逗号之间未使用的部分,[^,]*,\s*
,1112迪士尼博士,
用于获取阿纳海姆奥兰多的([^\s]*)
Orlando和FL之间有一个或多个空格\s+
用于获取([^\s]*)
FL,CA,…
在\s*$
处用EOL
修复带尾随空格的图案结尾$
然后在您的
sed
命令的替换部分中,您重新排列模式,并通过\4:\2:\1:\3
在模式之间放置列。您尝试了什么,哪些不起作用?这不是免费的代码编写服务,您至少需要自己尝试一下……很抱歉,没有立即响应。我正在尝试获取所有这些内容使用sed-e's/,/:/g'-e's/:/g'-e's/\.//g'之类的东西删除空格和其他内容。提示:您可能需要先删除街道地址。@Matt您尝试过我的解决方案吗?:-)干杯!非常感谢你的帮助。