所以,我有这个字符串:
JobDefinition://apps/ess/scm/productHub/itemImport/ItemImportSchedulingJobDef
我想把它改造成:
/a/e/s/p/i/ItemImportSchedulingJobDef
当我使用时:sed -E 's|/([a-z]{1})|\1|g'
我刚刚得到
JobDefinition:/appsessscmproductHubitemImport/ItemImportSchedulingJobDef
我正在使用 sed,但我认为这是一个一般的正则表达式问题。
它基本上是一个命名空间,而且很长,所以我试图维护命名空间和最终唯一标识符的某些内容
它与完全限定类名的 spring 压缩日志记录非常相似(我的灵感)
你可以使用这个sed:
s='JobDefinition://apps/ess/scm/productHub/itemImport/ItemImportSchedulingJobDef'
sed -E 's~^[^:]+:/|(/[a-z])[^/]+~\1~g' <<< "$s"
/a/e/s/p/i/ItemImportSchedulingJobDef
Run Code Online (Sandbox Code Playgroud)
这里:
^[^:]+:/:匹配:/输入之前和包含的初始部分|: 或者(/[a-z])[^/]+:匹配/后跟小写字母并将其捕获到组 #1 中。然后它匹配 1+ 个非 的字符/。\1但是,这假设最后一部分始终以非小写字母开头。
如果不是这种情况,您可以将此sed命令与循环一起使用:
sed -E -e 's~^[^:]+:/~~' -e :a -e 's~(/[a-zA-Z])[^/]+/~\1/~g; ta' <<< "$s"
/a/e/s/p/i/ItemImportSchedulingJobDef
Run Code Online (Sandbox Code Playgroud)