【问题标题】:replace last n parts after spliting on delimiter using sed or regex使用 sed 或 regex 在分隔符上拆分后替换最后 n 个部分
【发布时间】:2021-03-12 04:12:11
【问题描述】:

我需要用空格替换由分隔符分隔的字符串的最后 2 部分以清理名称。 示例:

something-useful-a12356-78929

=>

something-useful
something-more-useful-v35f62-2728902

=>

something-more-useful

我尝试了以下方法:

echo "something-useful-12345-67890" | sed -re 's/(-([0-9])+)//g'

如果我的最后两个分隔符元素仅为数字,则此方法有效,但不适用于上面的示例。在“-”上拆分后,我需要删除最后两个部分 我只能使用 sed 或 regex 来解决这个问题。

【问题讨论】:

  • 是否总是需要替换的最后两个元素?如果是这样,那么(?:-[^-]+){2}$ 可能吗?
  • echo 'something-more-useful-v35f62-2728902' | sed -E 's/(.*)(-[^-]+){2}$/\1/'

标签: regex sed


【解决方案1】:

sed 's/\(-[^-]*\)\{2\}$//' file 做你想做的事吗?

【讨论】:

    【解决方案2】:

    使用[^-] 匹配除- 之外的任何内容。使用$ 匹配字符串的结尾。匹配连字符后跟非连字符两次。

    sed -r 's/(-[^-]+){2}$//'
    

    【讨论】:

      【解决方案3】:

      这可能对你有用(GNU sed):

      sed -re 's/-[^-]*//2g' file
      

      从- 后跟非- 字符的第二次出现全局删除。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-19
        • 1970-01-01
        • 2017-04-23
        • 2021-12-28
        • 1970-01-01
        • 2013-02-07
        相关资源
        最近更新 更多