繁体   English   中英

使用 sed 或正则表达式在分隔符上拆分后替换最后 n 个部分

[英]replace last n parts after spliting on delimiter using sed or regex

我需要用空格替换由分隔符分隔的字符串的最后 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 或正则表达式来解决这个问题。

sed 's/\(-[^-]*\)\{2\}$//' file是否符合您的要求?

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM