LinuxForum.Fans
Тема

Скопировать пару строк из файла в другой

Автор: SergMarkov 41 сообщений 3808 просмотров
#288751

Надо скопировать пару строк из одного файла (.INSTALL) в любом пакете арча в другой (doinst.sh) в слаке. Конкректно в .INSTALL есть что то типа
.post_install(){
update-desktop-database -q
}
Надо вытащить только update-desktop-database -q и вставить это в doinst.sh. Вопрос как sed это сделать ?

#288752

SergMarkov, покажите файл doinst.sh и как он должен выглядеть в результате.

#288759

вот .INSTALL

post_install(){
update-desktop-database -q
}

Тоже самое в doinst.sh
update-desktop-database -q

Нужно для создания пакетов слаки из abs и аура, единственное чего не хватает.
Причем в .INSTALL может быть не только эта строка, но и любые другие, заключенные между post_install(){ и }

#288760
"Lupo Alberto" написал:
покажите файл doinst.sh и как он должен выглядеть в результате.
#288761

Что есть в .INSTALL
post_install() {
update-mime-database /usr/share/mime > /dev/null
update-desktop-database -q
#[ -d /usr/lib/gio/modules ] && gio-querymodules /usr/lib/gio/modules
}

post_upgrade() {
post_install
}

post_remove() {
post_install
}

Что должно быть в doinst.sh

update-mime-database /usr/share/mime > /dev/null
update-desktop-database -q
#[ -d /usr/lib/gio/modules ] && gio-querymodules /usr/lib/gio/modules

#288763
"SergMarkov" написал:
update-desktop-database -q

То есть эта строка всегда должна быть второй? Или все три строки?
Проще было показать файл «до» и «после».

#288764
SergMarkov написал:
Что есть в .INSTALL
post_install() {
update-mime-database /usr/share/mime > /dev/null
update-desktop-database -q
#[ -d /usr/lib/gio/modules ] && gio-querymodules /usr/lib/gio/modules
}

post_upgrade() {
post_install
}

post_remove() {
post_install
}

Что должно быть в doinst.sh

update-mime-database /usr/share/mime > /dev/null
update-desktop-database -q
#[ -d /usr/lib/gio/modules ] && gio-querymodules /usr/lib/gio/modules

grep update .INSTALL > doinst.sh

#288765
Lupo Alberto написал:
[quote="SergMarkov"] update-desktop-database -q

То есть эта строка всегда должна быть второй? Или все три строки?
Проще было показать файл «до» и «после».[/quote]
вот именно. неверное трактование "шаблона" приводит к неправильному определению regex

#288766
Lupo Alberto написал:
[quote="SergMarkov"] update-desktop-database -q

То есть эта строка всегда должна быть второй? Или все три строки?
Проще было показать файл «до» и «после».[/quote]
Не совсем, надо вытащить все между post_install() { и замыкающей }
и все строчки между ними, причем строчки могут быть любыми, и записать вытащенное из .INSTALL в doinst.sh
"До" в doinst.sh вообще ничего нет, он создается makepkg из слаки, который отрабатывается после и просто подхватит то, что уже есть в doinst.sh и допишет в него свое, создание симлинков, etc

#288767
moshell написал:

grep update .INSTALL > doinst.sh

строки могут быть любыми

#288768
SergMarkov написал:
[quote=moshell]
grep update .INSTALL > doinst.sh

строки могут быть любыми[/quote]

moshell написал:

вот именно. неверное трактование "шаблона" приводит к неправильному определению regex
#288770

sed -e '/./{H;$!d;}' -e 'x;/update/!d;' .INSTALL | egrep -v "{|}"

#288772

Я, мягко говоря, с sed не в ладах, можно сделать «красивее»...
[console]
lupo@gentoo-laptop /tmp % cat INSTALL
post_install() {
update-mime-database /usr/share/mime > /dev/null
update-desktop-database -q
#[ -d /usr/lib/gio/modules ] && gio-querymodules /usr/lib/gio/modules
}
post_upgrade() {
post_install
}

post_remove() {
post_install
}
lupo@gentoo-laptop /tmp % sed -n -e '/post_install() {/,/^}/p' INSTALL | sed -e '1d;$d' > doinst.sh
lupo@gentoo-laptop /tmp % cat doinst.sh
update-mime-database /usr/share/mime > /dev/null
update-desktop-database -q
#[ -d /usr/lib/gio/modules ] && gio-querymodules /usr/lib/gio/modules
[/console]

#288774

Альберто, Ваш случай выделяет часть кода между заданными строками, а мой просто выделяет абзац с заданным выражением

иными словами, программирование - это то же творчество.
хочу так, а хочу эдак

#288776
"moshell" написал:
а мой просто выделяет абзац с заданным выражением

[console]
lupo@gentoo-laptop /tmp % sed -e '/./{H;$!d;}' -e 'x;/update/!d;' INSTALL | egrep -v "{|}"

update-mime-database /usr/share/mime > /dev/null
update-desktop-database -q
#[ -d /usr/lib/gio/modules ] && gio-querymodules /usr/lib/gio/modules
post_install
[/console]
Первая и последняя строка вывода лишние.
egrep удаляет строки с фигурными скобками. Это не сработало для конкретного, не самого сложного, файла...

#288777
"Lupo Alberto" написал:
можно сделать «красивее»...

И правильнее:)

#288779
"moshell" написал:
sed -e '/./{H;$!d;}' -e 'x;/update/!d;' .INSTALL | egrep -v "{|}"

опять мелькает update...
Из условий у нас имеется только post_install() { и }

#288780

gu@moshell:~$ sed -e '/./{H;$!d;}' -e 'x;/update/!d;' .INSTALL | egrep -v "{|}"

update-mime-database /usr/share/mime > /dev/null
update-desktop-database -q
#[ -d /usr/lib/gio/modules ] && gio-querymodules /usr/lib/gio/modules
gu@moshell:~$
где тут лишняя последняя строка? у меня интерпретирует имеенно так.
а первая строка это пустая которая? она Вас смущает?

#288781

moshell, покажите «свой» файл .INSTALL, который вы используете для проверки.

#288782
"-=Serj=-" написал:
И правильнее:)
"Lupo Alberto" написал:
Я, мягко говоря, с sed не в ладах

Не получается обойтись без конвейера, передав всё одной команде sed :(

Войдите или зарегистрируйтесь, чтобы ответить.