Как разбить строку по строковому (многосимвольному) разделителю в массив?

Puede SSH a su servidor, CAT su archivo en una tubería a GUNZIP después de lo cual puede canalizar la salida sin comprimir a DD, que luego escribirá el archivo en el disco de su elección.

ssh user@host cat /path/to/image.img.gz | gunzip | sudo dd of=/dev/sdX

También puede mejorar esto usando PIGZ (Parallel Gzip )en lugar de GUNZIP para descomprimir su archivo. Esto es mejor ya que PIGZ usa todos sus núcleos de procesamiento mientras que GUNZIP usa solo 1. (Tenga en cuenta que necesitará instalar PIGZ antes de usarlo)

ssh user@host cat /path/to/image.img.gz | pigz -dc | sudo dd of=/dev/sdX

También puede mostrar el progreso de DD agregando status=progress al final de su comando DD.

ssh user@host cat /path/to/image.img.gz | pigz -dc | sudo dd of=/dev/sdX status=progress
1
05.06.2019, 21:49
2 ответа

Вы можете вручную перебрать переменную с расширением параметра:

#!/bin/bash
var='This is some sep.string
with
newlines
sep.another line'

a=()
while [[ $var =~ sep\. ]]
do
  e=${var%%sep.*}
  a+=("${e}")
  var=${var#${e}sep.}
done
a+=("${var}")

Это перебирает переменную (, обновляя ее в процессе ), отбрасывая первый разделитель и далее(%%ищет самое длинное совпадение, поэтому это будет отслеживаться в обратном направлении от конца строки до первого экземпляра. изsep.); он добавляет этот остаток в массив, а затем удаляет этот остаток и разделитель с начала переменной. Повторяйте до тех пор, пока переменная не перестанет содержать разделитель, затем добавьте остаток в массив.

1
27.01.2020, 23:30

Что-то вроде нативного способа сделать это, используя как раскрытие параметров, так и чтение массива

string='This is some sep.string'
mapfile -t array < <( echo "${string//sep./$'\n'}" )

${string//sep./$'\n'}-Заменит вхождения sep.новой строкой. mapfile/ readarrayсоздаст массив, в котором каждая строка будет содержать отдельный элемент.

1
27.01.2020, 23:30

Теги

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