【发布时间】:2017-12-30 21:20:06
【问题描述】:
在 sed 中,当一行不包含特定模式时,如何进行模式替换?
我知道如何在 vi 或 vim 中做到这一点。
例如,当行不包含“动物”时,将“兔子”替换为“野兔”,我可以这样做
:g!/animal/s/rabbit/hare/g
我想使用 foreach、find 和 sed 对目录下的数百个文件执行相同的操作。当该行不包含'=(Dtype)'时,我想替换'Dtype val1 = expression;'到'Dtype val1 =(Dtype)(表达式);'。但不包括像“Dtype *pval = expression;”这样的情况。也就是说,我想对非指针赋值进行 (Dtype) 强制转换。我试过了
>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/patter1/pattern2/g' 在 sed 中不起作用。正确的命令是什么?
【问题讨论】:
-
@Sundeep 您好,您的参考资料在文档中。我该如何搜索它?单独在文档部分?
-
不知道搜索导致该文档参考,但我在网上搜索时获得的第一个链接与确切的问题标题解决了你的问题......