оболочка - извлечение даты и времени из журналов

Вам нужно установить stretch и stretch-updates на 499, jessie и jessie-updates на 500, затем установить xen-hypervisor-4.6-amd64 вручную из stretch:

cat <<EOF | sudo tee /etc/apt/preferences.d/stretch-manual-only
Package:  *
Pin:  release n=jessie-updates
Pin-Priority:  500

Package:  *
Pin:  release n=jessie
Pin-Priority:  500

Package:  *
Pin:  release n=stretch-updates
Pin-Priority:  499

Package:  *
Pin:  release n=stretch
Pin-Priority:  499
EOF

создайте список источников для stretch:

sed -e 's/ \(stable\|jessie\)/ stretch/ig' /etc/apt/sources.list > /etc/apt/sources.list.d/debian-stretch.list    
aptitude update

это необходимые пакеты для Xen 4. 6:

aptitude install xen-utils-common/stretch xen-utils-4.6/stretch xen-linux-system-amd64/stretch xen-tools xen-utils-4.6/stretch xen-hypervisor-4.6-amd64/stretch libncurses5/stretch libncursesw5/stretch libtinfo5/stretch

Это установит их:

The following NEW packages will be installed:
  bridge-utils{a} debootstrap{a} debugedit{a} grub-xen-bin{a} grub-xen-host{a} ipxe-qemu{a} libaio1{a} libasound2{a} libasound2-data{a} libasyncns0{a} libauthen-sasl-perl{a} libbluetooth3{a} libboost-system1.55.0{a} libboost-thread1.55.0{a} libbrlapi0.6{a} libcaca0{a} libconfig-inifiles-perl{a} libcurl3-gnutls{a} libdata-validate-domain-perl{a} libdata-validate-ip-perl{a} libdata-validate uri-perl{a} libdirectfb-1.2-9{a} libelf1{a} libencode-locale-perl{a} libexpect-perl{a} libfdt1{a} libfile-listing-perl{a} libfile-slurp perl{a} libfile-which-perl{a} libflac8{a} libfont-afm-perl{a} libhtml-form-perl{a} libhtml-format-perl{a} libhtml-parser-perl{a} libhtml-tagset-perl{a} libhtm -tree-perl{a} libhttp-cookies-perl{a} libhttp-daemon-perl{a} libhttp-date-perl{a} libhttp-message-perl{a} libhttp-negotiate-perl{a} libice6{a} libio-html-perl{a} libio-pty-perl{a} libio-socket-ssl-perl{a} libio-stty-perl{a} libiscsi2{a} libjpeg62-turbo{a} liblist-moreutils perl{a} liblog-message-perl{a} liblog-message-simple-perl{a} liblua5.2-0{a} liblwp-mediatypes-perl{a} liblwp-protocol-https-perl{a} libmailtools-perl{a} libnet-domain-tld-perl{a} libnet-http-perl{a} libnet-ipv6addr-perl{a} libnet-netmask-perl{a} libnet-smtp-ssl-perl{a} libnet-ssleay-perl{a} libnetaddr-ip-perl{a} libnetwork-ipv4addr-perl{a} libnspr4{a} libnss3{a} libogg0{a} libopus0{a} libpixman-1-0{a} libpulse0{a} libpython-stdlib{a} libpython2.7 minimal{a} libpython2.7-stdlib{a} librados2{a} librbd1{a} librpm3{a} librpmbuild3{a} librpmio3{a} librpmsign1{a} libsdl1.2debian{a} libseccomp2{a} libsm6{a} libsndfile1{a} libsocket6-perl{a} libspice-server1{a} libterm-size-perl{a} libterm-ui-perl{a} libtext-template-perl{a} libtimedate-perl{a} liburi perl{a} libusbredirparser1{a} libvdeplug2{a} libvorbis0a{a} libvorbisenc2{a} libwww-perl{a} libwww-robotrules-perl{a} libx11-6{a} libx11-data{a} libx11 xcb1{a} libxau6{a} libxcb1{a} libxdmcp6{a} libxen-4.4{a} libxen-4.6{a} libxenstore3.0{a} libxext6{a} libxi6{a} libxtst6{a} libyajl2{a} linux-image-4.3.0- -amd64 python{a} python-minimal{a} python2.7{a} python2.7-minimal{a} qemu-system-common{a} qemu-system-x86{a} qemu-utils{a} rinse{a} rpm{a} rpm common{a} rpm2cpio{a} seabios{a} sharutils{a} x11-common{a} xen-hypervisor-4.4-amd64{a} xen-hypervisor-4.6-amd64 xen-linux-system-4.3.0-1 amd64{a} xen-linux-system-amd64 xen-system-amd64 xen-tools xen-utils-4.4{a} xen-utils-4.6{b} xen-utils-common xenstore-utils{a} 
The following packages will be upgraded:
  libncurses5 libncursesw5 libtinfo5
3 packages upgraded, 133 newly installed, 0 to remove and 0 not upgraded.
Need to get 72,3 MB of archives. After unpacking 279 MB will be used.

Продолжайте изменять порядок загрузки в grub:

dpkg-divert --divert /etc/grub.d/08_linux_xen --rename /etc/grub.d/20_linux_xen 
update-grub

Проверьте grub menuentries в порядке с:

grep -i "menuentry '" /boot/grub/grub.cfg|sed -r "s|--class .*$||g"|nl -v 0

Теперь первая строка должна быть

     0  menuentry 'Debian GNU/Linux, with Xen hypervisor' 

перезагрузитесь и получайте удовольствие ;)

0
16.03.2019, 20:14
2 ответа

Вы допустили несколько ошибок:

  • cut использовать имя файла в качестве аргумента
  • вы забыли какую-то двойную кавычку(")

Итак, если я перепишу ваш пример с минимальным количеством изменений:

  • использование $(вместо`. это более надежно и может быть рекурсивным.
  • использование ${VARIABLE _NAME} вместо $VARIABLE _NAME. это более надежно

новая версия

file="filename"
while IFS= read -r line
do
    EXTRACT_DATE=$( echo "$line" | cut -d '[' -f2 | cut -d ' ' -f1  )
    echo "${EXTRACT_DATE}"        
done <"$file"
1
28.01.2020, 02:30

Основная проблема, которая создает ошибки, заключается в том, что вы используете строку чтения в $lineв качестве имени файла для cutдля чтения.

Вы также используете echoдля вывода результата подстановки команд. Это анти-паттерн -. Просто запустите конвейер, без echoи подстановки команд. Он сам выведет свой результат на терминал.

Здесь мы используем printf, чтобы дать cutстроку, прочитанную из файла:

file="filename"

while IFS= read -r line; do
    printf '%s\n' "$line" | cut -d '[' -f2 | cut -d ' ' -f1
done <"$file"

Следующее, что следует отметить, это то, что цикл whileсовершенно не нужен. Вы вызываете cutдважды для каждой строки в файле журнала. Утилита cutсама по себе способна читать файл построчно:

file="filename"

cut -d '[' -f2 "$file" | cut -d ' ' -f1

Или вы можете использовать GNUgrep:

grep -oP '(?<=\[)[^ ]+' "$file"

(Это извлекает все до первого пробела после первого[)

или стандартные sed,

sed 's/\].*//; s/.*\[//; s/.*//' "$file"

(Это удаляет все после первого ], затем удаляет все до первого [,затем отбивные из космоса и остальное часто)

Связанные:

1
28.01.2020, 02:30

Теги

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