В linux как заменить вложенный шаблон внутри шаблона в файле - PullRequest
0 голосов
/ 28 марта 2020

Я хочу изменить файл, read_write. c содержимое

SYSCALL_DEFINE1(lchown, const char __user *, filename, uid_t, user)
SYSCALL_DEFINE2(open, const char __user *, filename, int)

на

SYSCALL_DEFINE1(lchown, const char __user *, filename, uid_t, user)
SYSCALL_DEFINE2(open, const unsigned char __user*, filename, int)

т.е. я хочу изменить только аргумент внутри SYSCALL_DEFINE2, но не внутри SYSCALL_DEFINE1

1 Ответ

2 голосов
/ 28 марта 2020

С GNU sed:

sed '/SYSCALL_DEFINE2(/,/)/{s/const char __user \*/const unsigned char __user\*/}' file

Из строки, содержащей SYSCALL_DEFINE2(, в строку, содержащую ), это заменяет const char __user * на const unsigned char __user*.

Выход:

SYSCALL_DEFINE1(lchown, const char __user *, filename, uid_t, user)
SYSCALL_DEFINE2(open, const unsigned char __user*, filename, int)

Взгляните на man sed и найдите addresses.

...