【问题标题】:sed remove digits at end of the linesed 删除行尾的数字
【发布时间】:2012-05-22 17:51:11
【问题描述】:

我需要了解如何使用 sed 删除文本文件中行尾的最多 10 个数字。

例如,如果我有这个:

ajsdlfkjasldf1234567890
asdlkjfalskdjf123456
adsf;lkjasldfkjas123

应该变成:

ajsdlfkjasldf
asdlkjfalskdjf
adsf;lkjasldfkjas

谁能帮忙?

我有这个,但它不起作用:

sed 's/[0-9]{10}$//g'

【问题讨论】:

  • 我认为这只有在你正好有十个数字时才有效。
  • 是的,你能改进它以使其工作吗?我一直在尝试,但我不能:s

标签: regex linux sed


【解决方案1】:

你试过了吗:

     sed 's/[0-9]+$//'

只有在启用扩展正则表达式(-E 或 -r,取决于您的 sed 版本)的情况下,您的命令才会匹配并删除行尾的 10 位数字。

你应该试试

     sed -r 's/[0-9]{1,10}$//'

【讨论】:

    【解决方案2】:

    以下应该有效:

    sed 's/[0-9]\{1,10\}$//' file
    

    sed 中的正则表达式语法要求括号前的反斜杠用于重复,除非您使用扩展的正则表达式选项。

    【讨论】:

      【解决方案3】:

      快速浏览一下here 建议您应该试试这个:

      $ sed 's/[0-9]\{0,10\}$//g'
      

      { } 应该被转义,除非你切换到扩展的正则表达式语法:

      $ sed -r 's/[0-9]{0,10}$//g'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-19
        • 2013-09-23
        • 1970-01-01
        • 2016-11-05
        • 1970-01-01
        • 2015-10-05
        相关资源
        最近更新 更多