Перед заменой передать группу захвата sed через внешнюю программу?

Все, что тебе нужно было сделать, это сделать первый шаг

mdadm --manage /dev/md0 --fail /dev/sdc

На данный момент ваш массив RAID 5 работает в ухудшенном режиме, и вы можете заменить диск на новый.

К сожалению, похоже, что вы сократили эффективный размер вашего массива с 2 ТБ до 1 ТБ, уничтожив вторую половину вашей файловой системы. К счастью, вы говорите, что у вас есть резервные копии.

Я немного озадачен. С четырьмя дисками в конфигурации RAID5 у вас должно быть 3 ТБ. Но не видя результатов mdadm --examine, я не уверен, что могу предложить вам что-то еще.

0
27.10.2019, 07:36
2 ответа

Вы можете использовать GNU sed -, используя модификаторe(execute ):

e
This command allows one to pipe input from a shell command into pattern space. If a substitution was made, the command that is found in pattern space is executed and pattern space is replaced with its output. A trailing newline is suppressed; results are undefined if the command to be executed contains a NUL character. This is a GNU sed extension.

(источник)

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

Пр.

$ echo 'lorem ipsum foobar' | sed '
    s/\(lorem ipsum \)\(foobar\)/printf "%s%s" "\1" "$(echo "\2" | tr o a)"/e
  '
lorem ipsum faabar
3
28.01.2020, 02:17

Насколько мне известно :нет.

Можно записать пространство шаблонов в файл, используя

sed  '/example/w file'

, но не группу захвата. Вы можете выполнить внешнюю программу с помощью

sed 'e ls'

и вы можете прочитать файл с помощью

sed 'r file'

но я не вижу удобного способа сделать то, что вы просите. И, честно говоря, вы находитесь на границе полезности sedздесь.

awkможет быть здесь немного более гибким, но это место, где perl— ваш лучший вариант, как уже предложил @ikkachu в своем комментарии.

Вкратце о том, насколько это тривиально вperl:

while (<>){
    if (/(.*)(pattern)(.*)/){
        $pre=$1;
        $pat=$2;
        $post=$3;
        $repl=`filter_pgm $pat`;
        print $pre. $repl. $post;
    }
    else {
        print;
    }
}

(для тех, кто больше разбирается в Perl :Я знаю, что это уродливо и, возможно, потребуется немного полировки перед запуском в производство)

1
28.01.2020, 02:17

Теги

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