Как удалить определенную повторяющуюся строку из поля в текстовом файле?

Debian живет с упорством.
  1. Первая попытка с официальным изображением изwww.debian.org/CD/live/

    С сайта SE (в стандартной версии):

    wget https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-10.0.0-amd64-standard.iso
    

    Из автоматического выбора зеркала (mate live):

    wget http://debian-cd.debian.net/debian-cd/10.0.0-live/amd64/iso-hybrid/debian-live-10.0.0-amd64-mate.iso
    

    Затем контрольная сумма загружает файл сhttps://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/SHA256SUMS...

    Файловая система ISO в порядке для чтения -только , но есть небольшойобходной путь:мы могли бы заменить несущественные параметры загрузки на persistenceтаким образом.

    • После проверки файла!
    • вы можете изменить их, используя sedдля замены строк в двоичном формате.

      LANG=C sed 's/splash quiet/persistence /;s/quiet splash/persistence /' \
          /tmp/debian-live-10.0.0-amd64-mate-persist.iso
      

    Это создаст измененную копию вашего живого двоичного файла путем строгой замены splash quietили quiet splashна persistenceвезде. Хорошо, это будет работать, только если команда загрузки grub содержит эти два слова вместе.

    Но будьте осторожны, чтобы не пропустить пробел после настойчивости:

    "splash quiet" -> 12 characters
    "persistence " -> 12 characters
    

    Или ваш бинарный файл будет сломан.

  2. Установить на USB-накопитель

    dd if=debian-live-10.0.0-amd64-standard-persist.iso of=/dev/sdX
    

    Затем добавьте свой третий раздел для сохранения:

    fdisk /dev/sdX
    n           # new partition
    p           # primary
        # default: 3
        # default: next free sector
        # default: last addressable sector
    w           # write and quit
    

    Это можно было запустить без взаимодействия:

    fdisk /dev/sdX <<<$'n\np\n\n\n\nw'
    

    Форматирование и подготовка сохранения с помощьюunion:

    mkfs.ext4 -L persistence /dev/sdX3
    mount /dev/sdX3 /mnt
    echo '/ union' >/mnt/persistence.conf
    sync
    umount /mnt
    

    Тогда извлеките и попробуйте!

    Если вы используете официальный немодифицированный образ, для использования сохраняемости вам необходимо прервать выбор загрузки:

    После отображения экрана меню выберите вариант загрузки, затем вместо Вернуться нажмите Tab .

    Отобразится командная строка ядра, затем добавьте persistenceс пробелом после последнего слова (quiet), затем нажмите Return .

    К сожалению, поскольку 1-й раздел связан с UEFI и является ISO-образом, вы не можете изменить команду загрузки.

Настраиваемый Debian live с постоянным сохранением

Вам просто нужно добавить persistenceв командную строку загрузки, и больше ничего!? Есть способ, используя FAT и syslinux, но вам придется много манипулировать данными. Это долго, и я нахожу это не очень хорошо. Я предпочитаю:

  1. Создайте свой собственный Debian вживую

    Более обычный , но немного длиннее (по крайней мере для 1-го изображения ),

    Примечание :Все это было сделано подкорневымпользователем (это должно работать с использованием fakeroot, но это не тестировалось там и сегодня ).

    apt install live-build
    

    ... и все рекомендации.

    Я написал небольшую XARGSфункцию для удаления закомментированных строк:

    XARGS() { sed -ne '/#/d;s/ \t//g;H;${x;s/\n/ /g;s/^ //;p}'; }
    

    Первая настройка bootparams, с локализацией и аргументами сохранения:

    ExtraBootParams=$(XARGS <

    Теперь ваш список пакетов:

    PackageList=$(XARGS <<-eopl
        gnome
        gnome-core
        # gnome-full
        # debian-forensics
        debian-installer-launcher
    eopl
    )
    

    Самый первый шагlb:создание начального дерева:

    lb config --architectures amd64 -d buster --debian-installer-gui \
        true --archive-areas 'main contrib non-free' \
        --bootappend-live "$ExtraBootParams" 
    

    Теперь у вас есть маленькое дерево, вы можете:

    printf "%s\n" > config/package-lists/standard.list.chroot \
        $Packages $PackageList
    

    Хорошо, следующая команда займет очень много времени! (Приблизительно 1 час на моем хосте)

    lb build
    

    Если все в порядке, вы можете найти свой собственный Debian live:

    ls -l *.iso
    -rw-r--r--  1 root root 1511817216 sep  7 15:32 live-image-amd64.hybrid.iso
    
  2. Установить на USB-ключ (та же операция, что и для загруженных двоичных файлов)

    Образ 'iso -гибридный' содержит два раздела для UEFI и живого микса таким образом, что оба EFI и bios могут загружаться.

    file live-image-amd64.hybrid.iso
    live-image-amd64.hybrid.iso: DOS/MBR boot sector; partition 2 : ID
    =0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), startsect
    or 708, 5696 sectors
    

    Вы можете просто вставить в свой USB-ключ.:(Примечание :сначала убедитесь, что ваш USB-ключ не подключен!)

    dd if=live-image-amd64.hybrid.iso of=/dev/sdX
    

    Затем добавьте свой третий раздел для сохранения:

    fdisk /dev/sdX <<<$'n\np\n\n\n\nw'
    

    Форматирование и подготовка сохранения с помощьюunion:

    mkfs.ext4 -L persistence /dev/sdX3
    mount /dev/sdX3 /mnt
    echo '/ union' >/mnt/persistence.conf
    sync
    umount /mnt
    

    Извлечь и попробовать...

Debian live с зашифрованным сохранением

  1. Создайте свой собственный Debian в реальном времени, но с зашифрованным сохранением .

    Чтобы загрузиться с rootfs /при зашифрованном сохранении, необходимо добавить dm-cryptмодуль и связанные двоичные файлы на initrd(начальный электронный диск ), добавив параметр CRYPTSETUP=yв /etc/initramfs-tools/hooks/...

    Я написал небольшую XARGSфункцию для удаления закомментированных строк:

    XARGS() { sed -ne '/#/d;s/ \t//g;H;${x;s/\n/ /g;s/^ //;p}'; }
    

    Первая настройка bootparamsс локализацией и аргументами для сохраняемости и настройки шифрования:

    ExtraBootParams=$(XARGS <

    Теперь ваш список пакетов:

    PackageList=$(XARGS <<-eopl
        gnome
        gnome-core
        # gnome-full
        # debian-forensics
        debian-installer-launcher
    eopl
    )
    

    И ваш выбор пакета:

    Packages=$(XARGS <<-eopk
        cryptsetup
        cryptsetup-initramfs
        debian-installer-launcher
        firmware-linux-nonfree
        firmware-linux-free
        less
        ssh
    #   openvpn
    #   xtightvncviewer
        gsmartcontrol
        smartmontools
        partclone
        ntfs-3g
        task-gnome-desktop
        user-setup
        sudo
        apt-utils
    eopk
    )
    

    Конечно cryptsetupтребуется! ;-)

    Самый первый шагlb:создание начального дерева:

    lb config --architectures amd64 -d buster --debian-installer-gui \
        true --archive-areas 'main contrib non-free' \
        --bootappend-live "$ExtraBootParams" 
    

    Теперь у вас есть маленькое дерево, вы можете:

    printf "%s\n" > config/package-lists/standard.list.chroot \
        $Packages $PackageList
    

    Хорошо, следующие две команды займут очень много времени! (Примерно 40 м на моем хосте)

    lb bootstrap ; lb chroot
    

    Теперь вы можете добавить свой модуль и бинарники:

    echo dm-crypt >> chroot/etc/initramfs-tools/modules
    
    sed '/CRYPTSETUP=/s/^#//;s/=.*/=y/' -i \
        chroot/etc/cryptsetup-initramfs/conf-hook 
    ln -s../../cryptsetup-initramfs/conf-hook \
        chroot/etc/initramfs-tools/hooks/cryptsetup
    chroot chroot live-update-initramfs -u
    

    Затем запустить финальную стадию (займет еще много времени ~25'):

    lb installer ; lb binary
    

    Примечание :Если вы читаете cryptsetup: WARNING: Couldn't determine root device, все в порядке! Это означает, что cryptsetup установлен на вашем initrd.

    Если все в порядке, вы можете найти свой собственный Debian live:

    ls -l *.iso
    -rw-r--r--  1 root root 1511817216 sep  7 15:32 live-image-amd64.hybrid.iso
    
  2. Установить на USB-накопитель

    'iso -гибридный' umage уже содержит два раздела для UEFI и живое сведение таким образом, что EFI и BIOS могут загружаться.

    file live-image-amd64.hybrid.iso
    live-image-amd64.hybrid.iso: DOS/MBR boot sector; partition 2 : ID
    =0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), startsect
    or 708, 5696 sectors
    

    Вы можете просто вставить в свой USB-ключ.:(Примечание :сначала убедитесь, что ваш USB-ключ не подключен!)

    dd if=live-image-amd64.hybrid.iso of=/dev/sdX
    

    Добавьте новый раздел Linux, используя свободное место.

    fdisk /dev/sdX <<<$'n\np\n\n\n\nw'
    

    Это создаст раздел 3 , используя свободное место на вашем USB-накопителе.

    Затем подготовьте зашифрованный раздел

    cryptsetup -q luksFormat /dev/sdX3
    

    Введите пароль

    cryptsetup -q luksOpen /dev/sdX3 persist 
    

    Введите пароль еще раз

    mkfs.ext4 -L persistence /dev/mapper/persist
    mount /dev/mapper/persist /mnt
    echo '/ union' >/mnt/persistence.conf
    sync
    umount /mnt
    cryptsetup luksClose persist
    

Вот и все.

eject /dev/sdX
0
02.11.2021, 08:55
2 ответа

Если вас не волнует, какие из дубликатов будут удалены, и вы согласны с сохранением первого вхождения и удалением остальных, вы можете использовать:

$ awk '/C\(Cl8\)/ && ++a > 1{next} /C\(Cl7\)/ && ++b > 1{next}1' file | color -l 'C\(Cl7\)','C\(Cl8\)'
 1 V(Cl8)                         2.121
 2 V(C1,H3)                       2.067
 3 V(Cl7)                         2.121
 4 V(Cl7)                         1.347
 5 V(C4,H6)                       2.067
 6 V(Cl8)                         1.347
 7 V(Cl8)                         0.918
 8 V(C1,Cl7)                      1.220
 9 V(C4,Cl8)                      1.220
10 V(Cl7)                         0.918
11 V(C1,C4)                       1.958
12 C(Cl8)                         7.668
13 C(Cl7)                         7.668
14 C(C1)                          2.087
15 C(C4)                          2.087
18 V(C1,H2)                       2.067
19 V(Cl8)                         2.122
20 V(Cl7)                         2.122
21 V(C4,H5)                       2.067
1
02.11.2021, 10:21

Вот вариант:

$ sort -k2,2 file | sed -e 'N;s/^\(.*C(Cl7).*\)\n.*C(Cl7).*/\1/' -e 's/^\(.*C(Cl8).*\)\n.*C(Cl8).*/\1/' | sort -nk1,1
 1 V(Cl8)                         2.121
 2 V(C1,H3)                       2.067
 3 V(Cl7)                         2.121
 4 V(Cl7)                         1.347
 5 V(C4,H6)                       2.067
 6 V(Cl8)                         1.347
 7 V(Cl8)                         0.918
 8 V(C1,Cl7)                      1.220
 9 V(C4,Cl8)                      1.220
10 V(Cl7)                         0.918
11 V(C1,C4)                       1.958
12 C(Cl8)                         7.668
13 C(Cl7)                         7.668
14 C(C1)                          2.087
15 C(C4)                          2.087
# 16 C(Cl8)                         2.267 removed
# 17 C(Cl7)                         2.267 removed
18 V(C1,H2)                       2.067
19 V(Cl8)                         2.122
20 V(Cl7)                         2.122
21 V(C4,H5)                       2.067
1
02.11.2021, 10:42

Теги

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