Bash 如何使用多个分隔符进行分析

Bash 如何使用多个分隔符进行分析,bash,parsing,awk,Bash,Parsing,Awk,我有这样的话: package:/data/app/com.bskyb.skynews.android-XZdcB7swzPqeBcgUp2P0JQ==/base.apk=com.bskyb.skynews.android 注意这两个=。=是分隔符,但有时可能有1..n= 如何使用awk解析,必须是awk,这样才能获得 1.包装后的元素:直到并包括最后一个=然后是2。最后一个后面的元素= 所以使用上面的方法我会得到 /data/app/com.bskyb.skynews.android-XZd

我有这样的话:

package:/data/app/com.bskyb.skynews.android-XZdcB7swzPqeBcgUp2P0JQ==/base.apk=com.bskyb.skynews.android
注意这两个=。=是分隔符,但有时可能有1..n=

如何使用awk解析,必须是awk,这样才能获得 1.包装后的元素:直到并包括最后一个=然后是2。最后一个后面的元素=

所以使用上面的方法我会得到

/data/app/com.bskyb.skynews.android-XZdcB7swzPqeBcgUp2P0JQ= /base.apk=com.bskyb.skynews.android 使用GNU awk,您可以使用捕获复制sed替换

$ awk '{print gensub(/.*:([^=]+=?)=(.*)/,"\\1\n\\2", 1)}' file

/data/app/com.bskyb.skynews.android-XZdcB7swzPqeBcgUp2P0JQ=
/base.apk=com.bskyb.skynews.android

您的描述是“直到并包括最后一个=”,但您的第一个输出不包括==中的第二个=,并且在任何情况下,在输入中都有另一个=。您的问题我还不清楚-您显示的输出与您描述的输出不匹配。您应该提到这需要进行检查。谢谢。虽然我不懂,但它工作得很好。都在正则表达式中。