удалить набор одинаковых строк из набора файлов в каталоге

Да, но только до максимального количества виртуальных ЦП в определении виртуальной машины. Увеличение максимального числа требует завершения работы.

Например, эта виртуальная машина имеет два виртуальных ЦП с максимальным числом 8. Если число превышает 8, требуется завершение работы.

  <vcpu placement='static' current='2'>8</vcpu>
2
25.06.2020, 17:31
2 ответа

Сначала попробуйте это без файла mv, чтобы проверить, соответствуют ли новые созданные файлы .outтому, что вы хотите. В отношении -включите операцию mvдля перезаписи исходных файлов.

for file in webform.webform.*; do
    awk '/^  email_webdev:$/{n=42}{if(!n){print}else{n--}}' "$file" > "$file.out"
    mv -- "$file.out" "$file"
done

Сценарий awk обнаруживает строку точно так:

  email_webdev:

То есть два пробела, email_webdev:, конец -символа строки -.

Как только эта строка обнаружена, устанавливается значение n=42, что останавливает печать строк, а затем снова начинает печать только после подсчета 42 строк.

4
28.04.2021, 23:12

Для этого можно использовать редактор строк ex.

for f in webform.webform.*; do
  printf '%s\n' /email_webdev:/.,+41d x | ex -s "$f"
end

Рабочий:

  • Всякий раз, когда мы видим относительную адресацию, мы должны обращаться к редакторам строк ed/ ex, если размеры файлов не велики, потому что они поддерживают широкий спектр режимов адресации строк.
  • printfвыдает код exредактора, который exсчитывает свой стандартный ввод и применяет ко входному файлу.
  • Сначала мы делаем email_webdevтекущей строкой, выполнив поиск:/email_webdev:/.
  • Затем, начиная с текущей строки, мы берем 42 фрагмента строк .,.+41d.
  • Дело сделано, теперь сохраняемся и выходим:x

PS :Диапазон 179 -214 не 42 строки.

1
28.04.2021, 23:12

Теги

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