#string #bash #split #partial
#строка #bash #расколотый #частичное #разделение
Вопрос:
Давайте рассмотрим эту строку:
00x 00x 00x 0x0x0x0x0x0x 0x g09x t20x 0x 0x 0x0x
То, что я хочу получить, это:
00x 00x 00x 0x0x0x0x0x0x 0x g09x t20x
В принципе, логика такова:
-
Пока это 00x продолжайте читать оставшуюся часть строки.
-
До тех пор, пока это не 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. Спасибо. Это именно то, что я искал!