Bash 使用sed重新排列和删除字段

Bash 使用sed重新排列和删除字段,bash,sed,Bash,Sed,我需要帮助创建一个sed命令,该命令将重新排列下面文件中的字段,以便用冒号分隔这些字段,并将它们的顺序重新排列为:状态:lastName:restOfName:city(街道地址被删除) 米老鼠,1111迪斯尼博士,佛罗里达州奥兰多 米妮·穆斯,1112迪斯尼博士,加利福尼亚州阿纳海姆 亚当选民,佛罗里达州迈阿密比斯坎大道902号 完成后,它们应该是这样的 FL:鼠标:米奇:奥兰多 CA:老鼠:米妮:阿纳海姆 佛罗里达州:投票人:亚当:迈阿密 这是家庭作业,我只能使用sed。您可以使用以下s

我需要帮助创建一个sed命令,该命令将重新排列下面文件中的字段,以便用冒号分隔这些字段,并将它们的顺序重新排列为:
状态: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]*)
    用于获取您的
    Mickey,Minnie,
    (重复0到N个非空字符,这些字符将位于括号之间,因为这将被重新用作back ref
  • \s+
    米老鼠和鼠标之间有一个或多个空格
  • ([^,]*)
    将匹配字符串的
    鼠标部分(重复0到N个非逗号字符)
  • ,[^,]*,\s*
    两个逗号之间未使用的部分
    ,1112迪士尼博士,
  • ([^\s]*)
    用于获取阿纳海姆奥兰多的
  • \s+
    Orlando和FL之间有一个或多个空格
  • ([^\s]*)
    用于获取
    FL,CA,…
  • \s*$
    EOL
    处用
    $
    修复带尾随空格的图案结尾

然后在您的
sed
命令的替换部分中,您重新排列模式,并通过
\4:\2:\1:\3

在模式之间放置列。您尝试了什么,哪些不起作用?这不是免费的代码编写服务,您至少需要自己尝试一下……很抱歉,没有立即响应。我正在尝试获取所有这些内容使用sed-e's/,/:/g'-e's/:/g'-e's/\.//g'之类的东西删除空格和其他内容。提示:您可能需要先删除街道地址。@Matt您尝试过我的解决方案吗?:-)干杯!非常感谢你的帮助。