首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在sed中,如何只在不存在另一个模式时进行模式替换

在sed中,如何只在不存在另一个模式时进行模式替换
EN

Stack Overflow用户
提问于 2017-07-25 05:58:52
回答 1查看 111关注 0票数 1

在sed中,当一行不包含特定模式时,如何进行模式替换?

我知道如何在vi或vim中做这件事。

例如,当一行不包含“动物”时,将“兔子”替换为“兔子”,我可以这样做。

代码语言:javascript
运行
复制
:g!/animal/s/rabbit/hare/g

我想使用foreach、find和sed对一个目录下的数百个文件执行同样的操作。当该行不包含'= (D类型)‘时,我希望将’D类型val1 =表达式;‘替换为'Dtype val1 =(D Dtype)(表达式);’。但不包括'Dtype *pval =表达式;‘这样的情况。也就是说,我想把(D型)转换为非指针赋值.我试过了

代码语言:javascript
运行
复制
>foreach i (`find . -name \*.c`)
? sed -e 'g!/ = (Dtype)/s/Dtype \([a-z].*\) = \(.*\);/Dtype \1 = (Dtype)(\2);/g' $i >! tmp
? mv tmp $i
? end

但是这个‘g!/pattern/s/pattern1/pattern2/g’在sed中不起作用。正确的命令是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-25 06:07:48

这可能对您有用(GNU sed):

代码语言:javascript
运行
复制
sed '/animal/!s/rabbit/hare/g' file

搜索animal,如果没有找到,则全局地将rabbit替换为hare

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45294980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档