Как вставить строки с числами от X до Y в другой файл после строки Z?

Вы используете легкий менеджер окон. У меня была эта проблема прежде в другом таком менеджере окон. Таким образом, это походит на проблему с polkit мне. Делает Вашу систему, назвали каталог /etc/polkit-1/localauthority/? Если так, создайте файл (как корень)... Я использую нано текстовый редактор здесь. Вставка в терминал с CTRL + SHIFT + V.

su root
nano /etc/polkit-1/localauthority/50-local.d/55-storage.pkla

добавьте следующие строки:

[Storage Permissions]
Identity=unix-group:plugdev
Action=org.freedesktop.udisks.filesystem-mount;org.freedesktop.udisks.drive-eject;org.freedesktop.udisks.drive-detach;org.freedesktop.udisks.luks-unlock;org.freedesktop.udisks.inhibit-polling;org.freedesktop.udisks.drive-set-spindown
ResultAny=yes
ResultActive=yes
ResultInactive=no

теперь добавьте себя к plugdev группе:

usermod -a -G plugdev <your username>

выйдите из системы и войдите в. Если это - polkit, необходимо смочь смонтировать медиа теперь.

7
09.07.2014, 15:10
4 ответа

Если в вашей системе используется версия GNU sed, вы можете воспользоваться расширением GNU r команды:

r filename
    As a GNU extension, this command accepts two addresses.

    Queue the contents of filename to be read and inserted into the
    output stream at the end of the current cycle, or when the next input 
    line is read. Note that if filename cannot be read, it is treated as 
    if it were an empty file, without any error indication.

    As a GNU sed extension, the special value /dev/stdin is supported for 
    the file name, which reads the contents of the standard input. 

Например,

$ sed '3r /dev/stdin' 123.txt < <(sed -n '2,4p' abc.txt)
1
2
3
b
c
d
4
5
6
27.01.2020, 20:16

внутреннее редактирование с помощью ed и sed (на басовоминге):

ed -s 123.txt<<<$'3r !sed -n "2,4p" abc.txt\nw'
2
27.01.2020, 20:16

с помощью awk и sed:

$ awk 'FNR==3{print;system("sed -n '2,4p' abc.txt");next};1' 123.txt 
1
2
3
b
c
d
4
5
3
27.01.2020, 20:16

С помощью sed можно использовать команду r для вставки целого файла. Чтобы вставить часть файла, извлеките эту часть и подсоедините ее как ввод к sed. Для извлечения также можно использовать sed. С помощью

sed -n '2,4p' abc.txt | sed -i '3r /dev/stdin' 123.txt

с помощью awk можно прочитать один файл и перейти к другому файлу, находящемуся посередине.

awk <123.txt >123.txt.new '
    1                                    # print the input line
    NR==3 {                              # after line 3 of 123.txt, …
        while (getline < "abc.txt") {
            ++inner_NR;
            if (inner_NR >= 2) print;    # start printing at line 2 from abc.txt
            if (inner_NR == 4) break;    # stop after line 4
        }
    }
' &&
mv 123.txt.new 123.txt

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

head -n 3 <123.txt >123.txt.new &&
<abc.txt tail -n +2 | head -n 3 >>123.txt.new &&
tail -n +4 123.txt >>123.txt.new &&
mv 123.txt.new 123.txt

Вы можете использовать голову + хвост с sed. Для огромных файлов это, скорее всего, будет самым быстрым.

<abc.txt tail -n +2 | head -n 3 | sed -i '3r /dev/stdin' 123.txt

Обратите внимание, что все эти подходы записывают во временный файл, который перемещается в 123.txt (даже подходы, использующие sed -i, потому что это то, что sed -i делает под капотом).

2
27.01.2020, 20:16

Теги

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