部分字符串拆分为 Bash

Partial String split in Bash

让我们考虑这个字符串:

00x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x\g09x\t20x[=41=]x[=41=]x[=41=]x\

我要检索的是这个:

00x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x\g09x\t20x\

基本上,逻辑是:

  1. 只要是00x\就继续读剩下的字符串。

  2. 只要它不是 00x\ 就继续读取字符串的剩余部分。 在那里分裂

如何在 bash 中实现?注意中间有一个“9”,还有一个"t"。所以 2 00x\ 标记之间可能有 "garbage"。所以我不能只将字符串拆分成标记,我不能使用 cut (不是固定长度)。我可以用 awk 或 sed 做些什么?

谢谢。

编辑:输入的字符串可以在00x\之后跟其他字符串。像这样:00x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x\g09x\t20x[=41=]x[=41=]x[=41=]x\00x\00x\00x\00x\00x\00x\GL7Dx\00x\00x\00x\00x\00x\00x\00x\00x\00x\00x\BCx\V6Ax\00x\00x \00x\00x\00x\00x\00x\00x\00x\00x\H50x\ 我要的还是00x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x\g09x\t20x\

awk 中的内容:

$ awk '
BEGIN {
    FS=ORS="\"
}
{
    for(i=1;i<=NF;i++)
        if(($i=="00x")&&p!="00x"&&p!="") {
            printf "\n"
            exit
        } else {
            p=$i
            print $i
        }
}' file

更新数据的输出

00x[=11=]x[=11=]x[=11=]x[=11=]x[=11=]x[=11=]x[=11=]x[=11=]x\g09x\t20x\

在 perl 中使用负后视:

$ perl -ne 's/(?<!00x)\00x.*/\/g;print' file
00x[=12=]x[=12=]x[=12=]x[=12=]x[=12=]x[=12=]x[=12=]x[=12=]x\g09x\t20x\