从头开始删除直到字符串中的某个部分

Ope*_*way 0 string bash perl awk sed

我喜欢用字符串

abc_dsdsds_ss_gsgsdsfsdf_ewew_wewewewewew_adf
Run Code Online (Sandbox Code Playgroud)

我需要得到一个新的,我在原始字符串中删除从"_"开始到最后一次出现的所有内容和下一个字符(可以是3,4,或任何数字)

所以在这种情况下,我会得到

_adf
Run Code Online (Sandbox Code Playgroud)

我怎么能用"sed"或其他bash工具做到这一点?

小智 5

正则表达式模式匹配是贪婪的.因此^.*_将匹配所有字符,包括最后一个_.然后把下划线放回去:

echo abc_dsdsds_ss_gsgsdsfsdf_ewew_wewewewewew_adf | sed 's/^.*_/_/'
Run Code Online (Sandbox Code Playgroud)