sed: сопоставить шаблон и после этого заменить каждое вхождение другого шаблона

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

Archнеразработана как «удобная для пользователя» или простая. Он предназначен для технически подкованных пользователей, которые хотят иметь систему, настроенную именно так, как они хотят. Если у вас нет большого опыта использования Linux, вам действительно следует выполнить самую простую установку из возможных, а именно с помощью установочного носителя.

В первый раз, когда я установил Arch около двух или трех лет назад, я уже пользовался Linux более 15 лет. Я был вполне доволен командной строкой и относительно хорошо разбирался в Linux. Я устанавливал различные дистрибутивы как минимум на дюжину или более разных машин. Несмотря на все это, мне все же пришлось попробовать два или три раза, прежде чем у меня все получилось.

Документация Arch, возможно, лучшая в мире Linux. Если вы будете следовать инструкциям до буквы , все будет в порядке. (Мне пришлось переделать это, потому что я подумал, что пара вещей не так уж важны, не делайте этой ошибки ).

Если вы следуете руководству, все должно работать, но поскольку это не самый простой процесс для начала, не усложняйте себе жизнь, выбирая начальную загрузку. Это просто добавляет несколько дополнительных шагов, которые не приносят вам особой пользы, и являются еще несколькими местами, где вы можете сделать что-то не так.

1
25.01.2020, 14:44
3 ответа

Слишком сложно в sed, но намного проще в Perl:

perl -pe '/b/g and substr($_, pos) =~ s/a/A/g'

Первое совпадение /b/gсоответствует первому совпадению bв строке, которая устанавливает posна его позицию. Затем подстрока, начинающаяся с этой позиции, подвергается замене.

4
27.01.2020, 23:15

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

 ( echo 'zzzaaaaadddd' ; 
   echo 'ssssaaaaajaaaaakaaaaa'; 
   echo 'ssssaaaaaaaaaakaaaaa';  ) | \
      sed '/aaaaa.*aaaaa/ { s/aaaaa/_=|=_/; s/aaaaa/GGGGG/g; s/_=|=_/aaaaa/ }'

zzzaaaaadddd
ssssaaaaajGGGGGkGGGGG
ssssaaaaaGGGGGkGGGGG

объяснение:

  • будет затронута строка как минимум с 2-кратным значением aaaaa
  • замените aaaaa строкой _=|=_, которой у вас никогда не будет
  • замените другие ааааа на то, что вы хотите GGGGG
  • заменить обратно _=|=_на ааааа
1
27.01.2020, 23:15

Попробуйте также это рекурсивное sedрешение:

sed ':L; s/\(a*\)b\(a*\)a/\1b\2b/; tL; ' file

Он рекурсивно заменяет каждое целевое вхождение aна b, пока все не будет выполнено.

1
27.01.2020, 23:15

Теги

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