Как я могу видеть, что процессы выполняются другим экземпляром корня на моем Beaglebone

Я не думаю, что вы можете заменить = с помощью grep там, где его нет в оригинальном тексте; однако, предполагая, что ваша версия grep поддерживает расширения PCRE, вы можете разделить пары имен-значений следующим образом

grep -oP '(option |range )?\K(\S+) (.+?(?=;))'

Если вы хотите, чтобы подстановка была выполнена, вместо этого можно использовать обычный perl, например

.
perl -pe 's/(option |range )?(\S+) (.+?);/$2="$3"/' file
subnet 172.25.10.0 netmask 255.255.255.0 {
domain-name-servers="172.25.10.9, 8.8.8.8"
default-lease-time="300"
max-lease-time="7500"
dynamic-bootp="172.25.10.10 172.25.10.30 "
broadcast-address="172.25.10.255"
routers="172.25.10.1"
ip-forwarding="off"
}

[Ты не конкретизируешь, что ты хочешь сделать с открывающими и закрывающими строками, поэтому я просто оставил их как есть]

или, более-менее эквивалентно с sed

sed -E 's/(option |range )?([^[:space:]]{1,}) (.*);/\2="\3"/' file

, из которых выражение разбивается на 3 группы, состоящие из 3 -х групп, соответственно

  • дополнительная строка, состоящая из опций или диапазона, за которой следует один пробел
  • непустая последовательность не пробельных символов (за которой следует один пробел)
  • нуля или более символов (за которым следует ); )

, а затем заменить обратно только вторую и третью группы знаком = и добавить двойные кавычки. В реальном приложении вы, вероятно, должны попытаться сделать эти выражения более робастными, например, заменив любые одинарные пробелы ненулевыми последовательностями символов POSIX [[:пробел:]] (т.е. пробелами и/или табуляциями).

Обратите внимание, что во всех случаях предполагается, что только поля со значением могут содержать пробелы; предполагается, что поля имени (как default-lease-time) состоят из символов, не содержащих пробела. Я не думаю, что существует лексический способ работы со случаем, когда оба поля могут содержать произвольные нецитируемые пробелы.

1
20.10.2014, 03:17
3 ответа

Похоже, вы уже нашли ответ. Но другой, возможно, более легкий для запоминания, это

killall -USR1 dd

(который будет сигнализировать о каждом процессе dd, который обычно есть только один)

Вывод отображается в оригинальном окне, потому что вы посылаете сигнал на существующую команду 'dd', а в dd есть функция, при получении которой он сбрасывает прогресс в stderr.

Я также хочу обратить внимание на то, что вы перезаписываете раздел, КОТОРЫЙ является ВЕРХНЕВЫМИ МОНТАЖНЫМ. Это очень плохая вещь, и вы, скорее всего, испортите свою файловую систему. Всегда размонтируйте раздел перед его перезаписью.

Кроме того, иногда можно ускорить dd, увеличив размер блока (и давайте ssh вытаскивать его прямо из файла). Например, измените команду на

ssh root@192.168.7.2 "dd of=/dev/mmcblk0 bs=1M" < /Users/user/Downloads/2014-09-09-wheezy-raspbian.img
1
27.01.2020, 23:37

Эта команда работала в конце, выполненная на моей Beaglebone в качестве корня:

pkill -USR1 -n -x dd

Я мог бы запустить команду снова и снова, и она действительно обновилась (медленная передача).

Интересно, что обновление появится на окне других окна (т.е. один, который выполняет команду DD):

Debian GNU/Linux 7

BeagleBoard.org BeagleBone Debian Image 2014-04-23

Support/FAQ: http://elinux.org/Beagleboard:BeagleBoneBlack_Debian
39136+0 records in
39136+0 records out
20037632 bytes (20 MB) copied, 5.6016 s, 3.6 MB/s
89376+0 records in
89376+0 records out
45760512 bytes (46 MB) copied, 12.3178 s, 3.7 MB/s
205152+0 records in
205152+0 records out
105037824 bytes (105 MB) copied, 27.7496 s, 3.8 MB/s
296608+0 records in
296608+0 records out
151863296 bytes (152 MB) copied, 40.7469 s, 3.7 MB/s
361184+0 records in
361184+0 records out
184926208 bytes (185 MB) copied, 49.3917 s, 3.7 MB/s
432672+0 records in
432672+0 records out
221528064 bytes (222 MB) copied, 58.9498 s, 3.8 MB/s
648529+0 records in
648529+0 records out
332046848 bytes (332 MB) copied, 88.3797 s, 3.8 MB/s
702289+0 records in
702289+0 records out
359571968 bytes (360 MB) copied, 103.606 s, 3.5 MB/s
987329+0 records in
987329+0 records out
505512448 bytes (506 MB) copied, 194.866 s, 2.6 MB/s
991001+0 records in
991001+0 records out
507392512 bytes (507 MB) copied, 197.19 s, 2.6 MB/s
1
27.01.2020, 23:37

Инструмент, который я использую для отслеживания текущей передачи файлов (, т. е. я использовал для отслеживания копирования ROMS с SD-карты на USB-накопитель в RetroPie ), который делает именно то, что достаточно уместно progress.

Это «Tiny, Dirty, Linux -и -OSX -Только команда C, которая ищет coreutilsосновные команды (cp, mv, dd, tar, gzip/ gunzip, cat, rsyncи т. д. )работает в настоящее время в вашей системе и отображает процент скопированных данных».

Вероятно, вам придется установить его (sudo apt install progress), а затем запустить как sudo.

Я рекомендую добавить команду -m, чтобы она постоянно отслеживала и обновляла:

sudo progress -m
0
21.04.2020, 04:35

Теги

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