【问题标题】:Extract string between strings using grep/sed使用 grep/sed 提取字符串之间的字符串
【发布时间】:2021-05-04 17:36:08
【问题描述】:
msg="Overlapping blocks found during reloadBlocks" detail="[mint: 1615752000000, maxt: 1615759180001, range: 1h59m40s, blocks: 2]: <ulid: 01F4N20ECMTEAK47DT3A6CSVPW, mint: 1615752000000, maxt: 1615759180001, range: 1h59m40s>, <ulid: 01F42H5XRTFJZP0CGAQP2YHDB7, mint: 1615752000000, maxt: 1615759180001, range: 1h59m40s>\n[mint: 1615759200000, maxt: 1615762780001, range: 59m40s, blocks: 2]: <ulid: 01F4N20WGMS1RX8ZV2A3PZQQQK, mint: 1615759200000, maxt: 1615762780001, range: 59m40s>, <ulid: 01F42H6EE2T7S688XAF14K5WKF, mint: 1615759200000, maxt: 1615766380001, range: 1h59m40s>\n[mint: 1615723200000, maxt: 1615730380001, range: 1h59m40s, blocks: 2]: <ulid: 01F42H3ZXFFMRC5108FXKZPN2X, mint: 1615723200000, maxt: 1615730380001, range: 1h59m40s>, <ulid: 01F4N1YEY1BAPF87PFFKK337DX, mint: 1615723200000, maxt: 1615730380001, range: 1h59m40s>\n[mint: 1615730400000, maxt: 1615737580001, range: 1h59m40s, blocks: 2]: <ulid: 01F4N1YXR9NQ6VXNC42V5XPVGX, mint: 1615730400000, maxt: 1615737580001, range: 1h59m40s>, <ulid: 01F42H4GR1BWBC2TEGHECV9WZ7, mint: 1615730400000, maxt: 1615737580001, range: 1h59m40s>\n[mint: 1615744800000, maxt: 1615751980001, range: 1h59m40s, blocks: 2]: <ulid: 01F4N1ZZAE9DSXJDCBCFTSQ1QW, mint: 1615744800000, maxt: 1615751980001, range: 1h59m40s>, <ulid: 01F42H5F8A0K6X6XAK1WSA314A, mint: 1615744800000, maxt: 1615751980001, range: 1h59m40s>"

msg="Found overlapping blocks during compaction" ulid=01F4T0FFTFMHW44712M75NTHBW

我有这样的日志,想找到所有的 ulid。一些日志的格式为ulid: &lt;id&gt;,而另一些日志的格式为ulid=&lt;id&gt;。一条线可以有多个 ulid。

【问题讨论】:

  • ulid 中允许使用哪些字符?看起来像[A-Z0-9]
  • 是的,没错

标签: sed grep


【解决方案1】:

使用 GNU grep:

grep -oP 'ulid(=|: )\K[A-Z0-9]+' file

此示例中的 ulid 是:

01F4N20ECMTEAK47DT3A6CSVPW
01F42H5XRTFJZP0CGAQP2YHDB7
01F4N20WGMS1RX8ZV2A3PZQQQK
01F42H6EE2T7S688XAF14K5WKF
01F42H3ZXFFMRC5108FXKZPN2X
01F4N1YEY1BAPF87PFFKK337DX
01F4N1YXR9NQ6VXNC42V5XPVGX
01F42H4GR1BWBC2TEGHECV9WZ7
01F4N1ZZAE9DSXJDCBCFTSQ1QW
01F42H5F8A0K6X6XAK1WSA314A
01F4T0FFTFMHW44712M75NTHBW

【讨论】:

    【解决方案2】:

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

    sed -E 's/ulid: ([^,]*)/\n\1\n/;s/[^\n]*\n//;/\n/P;D' file
    

    用换行符包围 ulid。

    扔掉前面的非 ulid 字符串。

    打印 ulid(记住它必须用换行符分隔)

    删除打印的 ulid 并重复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      • 2017-01-31
      • 2021-09-08
      • 2022-01-25
      相关资源
      最近更新 更多