Ваше описание делает что-то другое, чем ваш пример.Следуя вашему примеру, вы всегда хотите заменить подстроку после /
из первой строки в кавычках всей первой строкой в кавычках, удалив предыдущее слово, если оно присутствует.
Таким образом, вы можете сначала собрать первые строки в кавычках из test2.txt
в буфере удержания следующим образом:
sed 's/[^"]*"\([^"]*\)".*/\1/;H;$!d;g' test2.txt
Затем использовать эту коллекцию для замены, добавляя ее к каждому удержанию:
sed '/<.*>/{s/[^"]*"\([^"]*\)".*/\1/;H;d};G;s/[^ ]* *\([^ ]\{1,\}\)\( [^\n]*\)\n.*\n\([a-z0-9]*\/\)\1.*/\3\1\2/;s/\n.*//' test2.txt test1.txt
последняя команда s
предназначена для обработки несовпадающих строк; вы можете оставить это, если это не произойдет в вашем случае. Это дает ваш результат.
Если вы хотите, чтобы это было более похоже на то, что вы описали, вы можете адаптировать его. Но будьте осторожны с изменением порядка имя
и путь
.
Сначала найдите соответствующий раздел с помощью lsblk
. Я сделал это, выполнив здесь в графическом интерфейсе
sudo mkdir /mnt/foo
sudo mount /dev/sda2 /mnt/foo
sudo mount --bind /dev /mnt/foo/dev &&
sudo mount --bind /dev/pts /mnt/foo/dev/pts &&
sudo mount --bind /proc /mnt/foo/proc &&
sudo mount --bind /sys /mnt/foo/sys
sudo chroot /mnt/foo
sudo apt-get install --reinstall xkb-data
exit
reboot
. Это работает!
Я не понимаю, почему у меня возникла ошибка initrams
с постоянным live ubuntu в Macbook. Работал только Live Ubuntu по умолчанию.