【问题标题】:how to parse with multiple delimiters如何使用多个分隔符解析
【发布时间】:2019-06-30 23:41:09
【问题描述】:

我有这样的行:

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

注意两个“=”。 “=”是分隔符,但有时可以有 1..n “=”。

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

所以使用上面我会得到

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

【问题讨论】:

  • 你的描述说'直到并包括最后一个=',但你的第一个输出不包括==中的第二个=,无论如何还有另一个@987654327 @ 之后在输入中。我还不清楚您的问题 - 您显示的输出与您描述的输出不匹配。

标签: bash parsing awk


【解决方案1】:

使用 GNU awk 您可以复制 sed 替换为捕获。

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

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

【讨论】:

  • 你应该提到需要 gawk。
  • 谢谢。虽然我不明白,但效果很好。
  • 一切都在正则表达式中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多