当前位置: 技术问答>linux和unix
问个shell编程的问题,急,送2000分。必送!!!!顶也有分。
来源: 互联网 发布时间:2015-09-24
本文导语: 用bash shell实现以下功能: 查找树型目录下(目录下还有子目录)的所有.c文件,将文件中的字符串"abc"替换为"xyz" 注意,abc可能不再一行,中间可能有空各,替换后的xyz在同一行。 也就是abc可能是 a bc a b ...
用bash shell实现以下功能:
查找树型目录下(目录下还有子目录)的所有.c文件,将文件中的字符串"abc"替换为"xyz"
注意,abc可能不再一行,中间可能有空各,替换后的xyz在同一行。
也就是abc可能是
a bc
a b c
a
b
c
是不是要用shell和awk写啊?
查找树型目录下(目录下还有子目录)的所有.c文件,将文件中的字符串"abc"替换为"xyz"
注意,abc可能不再一行,中间可能有空各,替换后的xyz在同一行。
也就是abc可能是
a bc
a b c
a
b
c
是不是要用shell和awk写啊?
|
先用命令
find 起始目录 -name *.c -print 将所有文件选出;
然后用
sed 's/[ ]*a[ ]*b[ ]*c/xyz/g' 所选出的文件名〉所选出的文件名 /*用替换后的结果更新原文件*/
上面的sed只能实现a bc、a b c在同一行的情况,上面的结果我已在Sco Unix测试过,能替换实现,但a、b、c不在一行还未试出来,我再试一下。
若在一个shell文件中实现,将上述命令组合处理一下即可。
find 起始目录 -name *.c -print 将所有文件选出;
然后用
sed 's/[ ]*a[ ]*b[ ]*c/xyz/g' 所选出的文件名〉所选出的文件名 /*用替换后的结果更新原文件*/
上面的sed只能实现a bc、a b c在同一行的情况,上面的结果我已在Sco Unix测试过,能替换实现,但a、b、c不在一行还未试出来,我再试一下。
若在一个shell文件中实现,将上述命令组合处理一下即可。
|
顶,接分
|
比俺会的多,顶一下吧!
|
这样看来 你不是把 a-->x b-->y c-->z 吗?
这样想就简单了
如果你非要是a .... b.....c 才替换 而a...c.... 就不算了 而从下一个 a 开始统计
那就麻烦了
还不如编个程序处理
这样想就简单了
如果你非要是a .... b.....c 才替换 而a...c.... 就不算了 而从下一个 a 开始统计
那就麻烦了
还不如编个程序处理
|
用awk
1,没有找到a时,原样输出
2,当找到一个a时,把一个变量做个标志,同时把内容保存到数组中暂不输出
3,找到b时,也做个标志
4, 若找到c,则把数组的内容输出在同一行上,并把标志和数组重置
5,若文件结束或找到了另外一个a时还没有找到b或c,则把数组原样输出,重置数组,标志找到a
大概思路如此,代码你自己写写看,我现在都懒得写代码了
1,没有找到a时,原样输出
2,当找到一个a时,把一个变量做个标志,同时把内容保存到数组中暂不输出
3,找到b时,也做个标志
4, 若找到c,则把数组的内容输出在同一行上,并把标志和数组重置
5,若文件结束或找到了另外一个a时还没有找到b或c,则把数组原样输出,重置数组,标志找到a
大概思路如此,代码你自己写写看,我现在都懒得写代码了