LINUX.ORG.RU

Получить путь к модулю

 , ,


0

3

Мне нужно получить часть фактического пути к модулю. Я пока делаю вот такую команду:

cut -d' ' -f1 /proc/modules | xargs modinfo | grep '^filename'

И получаю вывод:

filename:       /lib/modules/my_kernel_version/kernel/aaa/bbb/ccc
filename:       /lib/modules/my_kernel_version/kernel/aaa/bbb/ccc
filename:       /lib/modules/my_kernel_version/kernel/aaa/bbb/ccc
filename:       /lib/modules/my_kernel_version/kernel/aaa/zzz/ddd
filename:       /lib/modules/my_kernel_version/kernel/aaa/bbb/eee
filename:       /lib/modules/my_kernel_version/kernel/aaa/bbb/fff

Отсюда мне нужно получить только один путь до слова kernel для строк, содержащих 'ccc'.

Т.е. для моего примера желаемый результат будет выглядеть вот так:

/lib/modules/my_kernel_version/kernel/

Помогите улучшить grep для этого.

Deleted

Последнее исправление: Deleted (всего исправлений: 4)

echo /lib/modules/linux-$(uname -r)/kernel/aaa/bbb/ccc

anonymous
()

добавь еще один пайп в grep -Eo '/.*kernel/'

anonymous
()

А смысл ? бери сразу

echo /lib/modules/$(uname -r)/kernel

joy4eg ★★★★★
()

Наговнякал крайне быдлокодный скрипт на перле:

$_ = "filename:       /lib/modules/my_kernel_version/kernel/aaa/bbb/ccc
filename:       /lib/modules/my_kernel_version/kernel/aaa/bbb/ccc
filename:       /lib/modules/my_kernel_version/kernel/aaa/bbb/ccc
filename:       /lib/modules/my_kernel_version/kernel/aaa/zzz/ddd
filename:       /lib/modules/my_kernel_version/kernel/aaa/bbb/eee
filename:       /lib/modules/my_kernel_version/kernel/aaa/bbb/fff";
s/(.*kernel)(?=.*ccc).*(\n|\Z)/\1\n/g;
@sm = split /\n/;
for (@sm) {
	if (/kernel\/(?=.*)/) {
		s/.*//;
	}
}
s/filename\:(\s)*// for @sm;
$sm = join ("\n", @sm);
print $sm
Всё работает, но в конце пара лишних переносов строки, с ними было лень разбираться, поправишь вручную. Да, это не grep, но на безрыбье и рак — рыба.

the_electric_hand ★★
()

cut -d' ' -f1 /proc/modules | xargs modinfo | grep '^filename' | grep -v '^modinfo' | grep ccc | grep -o '/.*kernel/'

WereFox ★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.