Как ускорить установку apt-get? [закрыто]

Использование awk:
awk '
  function mysub(str) {
    if (str) gsub(/line/, "newline", str); return str
  }
  BEGIN {
    OFS=FS="("
  }
  NF>1 {
    if (FS=="(") {
      print $1,mysub($2); OFS=FS=")"
    } else {
      print mysub($1),$2; OFS=FS="("
    }
    next
  }
  {
    print FS=="(" ? $0 : mysub($0)
  }' /path/to/input

Пользовательская функция mysub - это то место, где вы выполняете замену, которую вы хочу сделать между скобками. Предполагается, что скобки не вложены.

Как это работает:

Есть два состояния, внутри и вне скобок.

  • Снаружи (начальное состояние) разделитель ввода и вывода устанавливается в открывающую скобку ( OFS = FS = "(" ).
  • Как только встречается строка с более чем одним поле разделено входным разделителем ( NF> 1 ) и…
    • … вы в данный момент находитесь во внешнем режиме ( FS == "(" ), все до и после разделителя полей выводится (с разделителем вывода между ними), но последний проходит через функцию замены ( mysub ($ 2) ), а затем режим меняется изменив разделители ввода и вывода ( OFS = FS = ")" ),
    • … в противном случае ( else ), вы перейдете в внутренний режим, и все до и после выводится разделитель полей, но на этот раз он проходит через функцию замены ( mysub ($ 1) ), и здесь также меняется режим.
  • Во всех остальных строках вся строка выводится без изменений, если она выходит за пределы ( FS == "(" ) или иным образом проходит через функцию замены ( mysub ($ 0) ]).
Сжато в одну строку:
awk 'function m(s){gsub(/line/,"newline",s);return s}BEGIN{OFS=FS="("}NF>1{if(FS=="("){print $1,m($2);OFS=FS=")"}else{print m($1),$2;OFS=FS="("}next}{print FS=="("?$0:m($0)}' /path/to/input
Мои более сложные тестовые данные (которые некоторые однострочные решения здесь не работают с):
line96
line97 myFunction (line0

line1

line2

line3

line4) line98
line99
Вывод для него:
line96
line97 myFunction (newline0

newline1

newline2

newline3

newline4) line98
line99
{{ 1}} Вариант, в котором вместо этого удаляется все, что находится в круглых скобках (кроме первого и последнего разрывов строк):
awk '
  BEGIN {
    OFS=FS="("
  }
  NF>1 {
    if (FS=="(") {
      print $1,""; OFS=FS=")"
    } else {
      print "",$2; OFS=FS="("
    }
    next
  }
  FS=="("' /path/to/input
Вывод для этого :
line96
line97 myFunction (
) line98
line99
1
17.01.2016, 16:05
1 ответ

Что ж, могло случиться так, что у зеркала были проблемы, иногда такое случается, как это обсуждение Reddit между пользователями, у которых были ошибки в зеркалах
и вы должны сообщить, когда это произойдет (скрыто), и они сразу же доберутся до вас.

Вы можете изменить зеркала в вашем /etc/apt/sources.list на зеркала ближе к тому месту, где вы живете, с этого сайта https://www.debian.org/mirror/list .

например:

deb http://ftp.us.debian.org/debian/ stretch main .

можно изменить на

deb ftp.br.debian.org/debian stretch main .

Если я живу в Бразилии или, может быть, Бразилия сейчас быстрее.

Или вы можете просто перейти на httpredir mirrors, которое просто выберет для вас лучшее зеркало deb http://httpredir.debian.org/debian stretch main .

И вы можете прочитать здесь больше примеров https://wiki.debian.org/SourcesList

2
27.01.2020, 23:36

Теги

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