заменить конкретный текст после N -го вхождения символа

Нельзя так просто сравнивать машины. Вам нужно решить несколько вопросов:

  1. Те же диски (в смысле скорости, операций ввода-вывода, кэша, разбиения диска )на хост-системах и виртуальных машинах. С теми же конфигурациями, LVM и т. д.
  2. Одно и то же программное обеспечение -вы должны использовать ту же версию хост-ОС, ту же патчи, те же настройки
  3. Одни и те же виртуальные машины -это наиболее важно в вашем случае, поскольку каждая виртуальная машина будет иметь уникальную нагрузку.
  4. Кроме того, одна и та же виртуальная машина может отображать разную нагрузку в зависимости от времени работы. день, операции, выполняемые на этой машине, и т. д.
-1
11.12.2020, 20:23
2 ответа

Сsed:

<your-file sed '
  s/"/"\
/10;                          # add a newline after the 10th "
  h;                          # save a copy
  s/.*\n//;                   # remove everything before the newline
  s/[0-9.]\{1,\}/#Mi/g;       # replace numbers with #Mi
  G;                          # append saved copy
  s/\(.*\)\n\(.*\)\n.*/\2\1/; # put it back together'

Сperl(5.14.0 или выше для флага подстановки r):

perl -pe 's{(.*?"){10}\K.*}{$& =~ s/[\d.]+/#Mi/gr}e' < your-file

Со старыми версиями (, но по крайней мере 5.10.0 для\K):

perl -pe 's{(.*?"){10}\K.*}{($r = $&) =~ s/[\d.]+/#Mi/g; $r}e' < your-file

В еще более старых версиях:

perl -pe 's{((?:.*?"){10})(.*)}{
  $l = $1; ($r = $2) =~ s/[\d.]+/#Mi/g; $l.$r}e' < your-file

В обоих числах — любая последовательность из одной или нескольких цифр или .. Возможно, вы захотите уточнить шаблон, чтобы он не совпадал с такими вещами, как 127.0.0.1, ...или .в любом месте на случай, если такие вещи могут произойти во входных данных после 10 th". Например, в perlэто могут быть(?<!\S)\d+\.\d+(?!\S):цифры -точка -цифры, которым не предшествует и не следует не -пробел.

На вашем образце даже

perl -pe 's/(?<!\S)\d+\.\d+(?!\S)/#Mi/g' < you-file

было бы достаточно, так как часть перед 10 й"не имеет ни одной из этих цифр -точка -цифры не -окружены не -пробел.Все сводится к тому, что вы хотите заменить, и что может произойти во входных данных, что вы не хотите подставлять.

3
28.04.2021, 23:02

С помощью perlделаем это следующим образом. Отметьте 10-е вхождение двойной кавычки с помощью \n, так как она никогда не может присутствовать в строке, поскольку она удаляется опцией -l.


$ perl -lpe '
    s/((?:.*?"){10})/$1\n/;
    s/(?<!\S)\d+\.\d+(?!\S)(?!.*\n)/#Mi/g;
    tr/\n//d;
' file

$ d='[[:digit:]]' f="$d$d*[.]$d$d*" r='#Mi' 
$ sed -Ee "
    s/\"/&\n/10
    :loop
       s/(\n.*\s)$f(\s|\$)/\1$r\2/
    t loop
    s/\n//
" file

0
28.04.2021, 23:02

Теги

Похожие вопросы