perl -pe 's/".*?"/do{$a = $&; $a =~ s: +:,:g; $a}/ge;'
По сути, это просто глобальная замена регулярного выражения s / regex / replace / g
.
Регулярное выражение ". *?"
, он соответствует каждой подстроке, которая начинается с "
и заканчивается следующим за ним "
.
Сложные части:
e
после g
.) s: regex: replace: g
, которая заменяет любую непустую последовательность пробелов запятой. (Мы не можем использовать тот же разделитель, что и во внешней замене, поэтому мы используем :
вместо /
.) $ &
некоторой другой переменной $ a
, а затем выполнить внутреннюю замену на $ a
и, наконец, выведите $ a
. В достаточно свежей версии Perl можно избежать присвоения вспомогательной переменной. Используя модификатор r
, внутреннюю замену можно выполнить непосредственно на копии совпавшей подстроки $ &
(спасибо Стефану Шазеласу):
perl -pe 's/".*?"/$&=~s: +:,:gr/ge;'
На диске есть HPA. У меня тот же диск, и я удалил HPA, успешно восстановив потерянные сектора, сделав оба диска идентичными. См.https://superuser.com/a/642765
# hdparm -N /dev/sdx
# hdparm -N p976773168 /dev/sdx