Частичное разделение строки в Bash

#string #bash #split #partial

#строка #bash #расколотый #частичное #разделение

Вопрос:

Давайте рассмотрим эту строку:

00x 00x 00x 0x0x0x0x0x0x 0x g09x t20x 0x 0x 0x0x

То, что я хочу получить, это:

00x 00x 00x 0x0x0x0x0x0x 0x g09x t20x

В принципе, логика такова:

  1. Пока это 00x продолжайте читать оставшуюся часть строки.

  2. До тех пор, пока это не 00x продолжайте читать оставшуюся часть строки. Разделение там.

Как это может быть достигнуто в bash? Обратите внимание, что посередине есть цифра «9» и буква «т». Таким образом, между 2 00x токенами может быть «мусор». Таким образом, я не могу просто разделить строку на токены, я не могу использовать cut (не фиксированная длина). Есть какая-нибудь магия, которую я могу сотворить с помощью awk или sed?

Спасибо.

Редактировать: входная строка может после других поется после 00x . Вот так: 00x0x0x0x0x0x0x0x0xg09xt20x0x0x0x0x0x0x0x0x0xGL7Dx0x0x0x0x0x0x0x0x0x0xBCxV6Ax0x0x0x0x0x0x0x0x0x0xH50x где то, что я хочу, все еще 00x 00x 00x 00x 00x 00x 00x 00x 00x 00x g09x t20x

Ответ №1:

Что — то в awk:

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

Вывод по обновленным данным

 00x0x0x0x0x0x0x0x0xg09xt20x
  

В perl используется отрицательный взгляд назад:

 $ perl -ne 's/(?<!00x)\00x.*/\/g;print' file
00x0x0x0x0x0x0x0x0xg09xt20x
  

Комментарии:

1. Спасибо. Это именно то, что я искал!