在linux中如何替换文件中模式内的子模式

Posted

技术标签:

【中文标题】在linux中如何替换文件中模式内的子模式【英文标题】:In linux how to replace a sub pattern inside a pattern in a file 【发布时间】:2020-07-09 03:07:01 【问题描述】:

我想改变一个文件,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】:

使用 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 *, 文件名, uid_t, 用户) SYSCALL_DEFINE2(open, const unsigned char __user*, filename, int)

查看man sed 并搜索addresses

【讨论】:

以上是关于在linux中如何替换文件中模式内的子模式的主要内容,如果未能解决你的问题,请参考以下文章

vim模式与模式切换vim命令模式

在Linux系统的Vim中如何写入?

替换特定模式的子字符串

替换模式内的所有匹配项

如何在linux中的vi编辑模式下删除一大块内容

如何在 unix 环境中使用 sed/awk/tr 将一个模式替换为另一个模式来保持其值?