Извлечение определенного значения из файла

Добавляя к ответу Шеппи, я бы не рекомендовал сразу переходить с любой другой версии на другую, кроме следующей версии.

Версия ядра GNU/Linux, которая у вас есть или используется, — 3.16, которая используется в jessie.

https://packages.debian.org/jessie/linux-image-3.16.0-4-amd64

Шеппи использует версию 4.9.0 -3, которая используется в растяжке

https://packages.debian.org/uk/stretch/kernel/linux-image-4.9.0-3-amd64

и я использую то, что сейчас используется в buster.

─[$] uname -a                                                                                                                       
Linux debian 4.11.0-1-amd64 #1 SMP Debian 4.11.6-1 (2017-06-19) x86_64 GNU/Linux 

https://packages.debian.org/sid/linux-image-4.11.0-2-amd64

[$] apt-cache policy linux-image-4.11.0-2-amd64                                                                                    
linux-image-4.11.0-2-amd64:
  Installed: (none)
  Candidate: 4.11.11-1+b1
  Version table:
     4.11.11-1+b1 1
          1 http://httpredir.debian.org/debian unstable/main amd64 Packages

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

Если вы все же хотите обновиться, я бы посоветовал отредактировать ваш /etc/apt/sources.list, указав имя более новой версии, выполнить apt update, обновить индекс, а затем установить более новую версию ядра, перезагрузить компьютер. системы и видим, что все в порядке. Вы также «могли бы» не торопиться и обновлять компоненты один за другим, но это долгий процесс, и возможна поломка. Даже если все пойдет по-твоему, это отнимет много времени.

С другой стороны, если вы только что установили stretch, вы получите исправления ошибок при разбиении на разделы для выбранной вами файловой системы, а также многое другое.

Еще одна вещь, которую вы могли бы и должны сделать, это-

$ apt list --installed | less

Надеюсь, вышеизложенное дало вам пищу для размышлений:)

-2
21.10.2019, 09:28
4 ответа

Это тривиальная задача для awk.

awk '/Zone/{print $2} /Population/{print $3}' file

Если в текущей строке есть Zone, печатает второе поле; для Populationпечатает третий.

2
28.01.2020, 05:15

Попробуйте это,

 awk '/Zone/ {print $2;getline; print $3}' file

A
500
B
600
C
400
  • getlineчитает следующую строку после текущей строки.
0
28.01.2020, 05:15

Использование grepи perl -совместимых регулярных выражений (PCRE):

grep -Po 'Zone \K.*|[0-9]+(?= unit)' file
  • -Pвключить perl -совместимые регулярные выражения
  • -oпечатать только совпадающие части

  • Zone \K.*соответствует любым символам (.*), следующим за Zone, плюс пробел. Все, что до \Kне печатается (ноль -ширина положительный просмотр назад ).

  • |или
  • [0-9]+(?= unit)соответствует одной или нескольким цифрам, за которыми следует пробел и unit. (?= unit)является утверждением положительного просмотра вперед с нулевой -шириной, и его образец (символ пробела иunit)также не печатаются.
0
28.01.2020, 05:15

С подстановкой команды sed:

$ sed -En '/Zone/N; s/Zone ([A-Z]+).+ ([0-9]+).*/\1\n\2/p' file
A
500
B
600
C
400

Для покрытия случая «Имя зоны» + «Значение области»:

$ sed -En '/Zone/N;N; s/Zone ([A-Z]+).+ ([0-9]+) sq.*/\1\n\2/p' file
A
150
B
200
C
100
0
28.01.2020, 05:15

Теги

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