【问题标题】:Sed: Searching for a string length and character specificSed:搜索字符串长度和特定字符
【发布时间】:2016-03-26 16:44:20
【问题描述】:

我一直在寻找几个小时来寻找包含 21 个数字字符的字符串并在字符串本身前面放置一个 return 的方法。最后我找到了解决方案:

sed -r 's/\b[0-9]{21}\b/\n&/g'

效果很好!

现在我有一组包含 21 个数字字符的新数据,但在字符串末尾还有一些字母字符,可变长度为 3 到 10 个字符。

示例输入:

169349870913736210308ABC
168232727246529300209DEFGHI
166587299965005120122JKLMNOPQRS
162411281984306600005TUVWXYZ

我想要的是在数字和字母字符之间有一个空格:

169349870913736210308 ABC
168232727246529300209 DEFGHI
166587299965005120122 JKLMNOPQRS
162411281984306600005 TUVWXYZ

请注意每个数字开头的 16。我试过使用:

sed -r 's/^\b[0-9]{21}\+[A-Z]{3,10}\b/ /g' filename

但我无法让它工作,因为我不知道也找不到如何专门搜索包含精确数量的数字字符和特殊长度的字母字符的字符串。我在这个网站上找到了很多有用的问题,但我找不到这个。

【问题讨论】:

    标签: regex string replace sed


    【解决方案1】:

    使用捕获组。

    sed -r 's/^([0-9]{21})([A-Z]{3,10})$/\1 \2/' filename
    

    【讨论】:

      【解决方案2】:

      从左到右搜索第一个非数字字符 ([^0-9]) 并将其替换为空格和匹配的 (&) 非数字字符:

      sed 's/[^0-9]/ &/' file
      

      输出:

      169349870913736210308 ABC 168232727246529300209 DEFGHI 166587299965005120122 JKLMNOPQRS 162411281984306600005 TUVWXYZ

      【讨论】:

        【解决方案3】:

        为什么不在前 21 个字符后添加一个空格,如下所示:

        sed 's/^...................../& /g'
        

        【讨论】:

          猜你喜欢
          • 2015-11-18
          • 1970-01-01
          • 2017-06-08
          • 1970-01-01
          • 2021-03-03
          • 2017-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多