sed:reversing pattern substitution

2021-02-11 16:04

I有以下.txt文件:ABC Cor234德克萨斯州奥克斯兰登顿7号76509-4321(682)543-7890我需要使用sed命令反向更改邮政编码的最后4位数字。例子输出:234橡树园7号;

解答动态

  • 您可以首先通过查找该行特有的模式来简化命令。在下面的示例中,我们将假设分号对要解析的行是唯一的(至少在示例文本中是如此)sed:
    #捕获该行的最后4位数字,并将其按与$sed'/;/s/\(.\)\(.\)\(.\)\(.\)$/\4\3\2\1/'ABC Cor 234 7 Oaks Lane Denton;TX 76509-1234(682)543-7890

    • 相反的顺序替换为另一个答案,但是使用Perl:
      $perl-lp-e'/;/lt;=-)\d{4}/reverse$lt;fileABC Cor 234 7 Oaks LaneDenton;TX 76509-1234(682)543-7890 这将查找包含;字符的行,并反转该行中破折号后的四位数字。
      使用Perl reverse函数反转数字。

      • 另一种sed替代方法,也可以灵活地反转任意长度的数字数字:
        sed-E':a 3s/-([0-9]+)([0-9])$/-\2-\1/;ta;:b 3s/-([0-9])-([0-9]+)$/-\1\2/;tb'

        • End

        免责声明:

        本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。