批量替换文件中指定字符串? 谢谢! 还有个批量改名没解决

sh/bash/dash/ksh/zsh等Shell脚本
richardzhang
帖子: 4
注册时间: 2007-07-28 12:56
送出感谢: 0
接收感谢: 0

批量替换文件中指定字符串? 谢谢! 还有个批量改名没解决

#1

帖子 richardzhang » 2007-08-08 11:48

我有一个目录记为conn,该目录下又有许多目录和文件,我想把conn下所有目录下的文件的符合有字符串"street+若干空格+star"替换为"street+一个空格+komme"。请问如何实现呢?

比如conn若干层目录下的一个文件里的字符串street+若干空格+star要替换为street+一个空格+komme。
最好用bash实现
上次由 richardzhang 在 2007-08-09 17:29,总共编辑 1 次。
头像
laborer
帖子: 1016
注册时间: 2005-10-25 11:15
送出感谢: 0
接收感谢: 1 次
联系:

#2

帖子 laborer » 2007-08-08 12:05

代码: 全选

find -type f -exec sed -i 's/street[[:space:]]*star/street komme/' {} \;

别忘了先备份。
hreiser@oakland:~$ killall -9 wife
police@oakland:~$ sudo find / -user hreiser
court@oakland:~$ sudo mv /home/hreiser /jail/
court@oakland:~$ sudo usermod -d /jail/hreiser -s "/usr/sbin/chroot /jail/" hreiser
头像
alinmn
帖子: 185
注册时间: 2006-05-19 21:42
来自: NIT
送出感谢: 0
接收感谢: 0

#3

帖子 alinmn » 2007-08-08 12:06

find conn -exec sed -e 's/street\s\+star/street komme/' --in-place '{}' \;
上次由 alinmn 在 2007-08-09 15:43,总共编辑 2 次。
头像
alinmn
帖子: 185
注册时间: 2006-05-19 21:42
来自: NIT
送出感谢: 0
接收感谢: 0

#4

帖子 alinmn » 2007-08-08 12:06

晕 慢了
头像
laborer
帖子: 1016
注册时间: 2005-10-25 11:15
送出感谢: 0
接收感谢: 1 次
联系:

#5

帖子 laborer » 2007-08-08 12:11

晕~~

楼上的,我先看到你回帖说用find+sed,本来都不打算回这个帖子了,因为问题也算解决了。但我之后一刷新,你的回帖居然不见了,我以为是系统问题,于是就回复了一下......

不是故意抢沙发的,呵呵。
hreiser@oakland:~$ killall -9 wife
police@oakland:~$ sudo find / -user hreiser
court@oakland:~$ sudo mv /home/hreiser /jail/
court@oakland:~$ sudo usermod -d /jail/hreiser -s "/usr/sbin/chroot /jail/" hreiser
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#6

帖子 eexpress » 2007-08-08 12:12

\s都没?
● 鸣学
头像
bones7456
论坛版主
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
送出感谢: 0
接收感谢: 8 次
联系:

#7

帖子 bones7456 » 2007-08-08 12:19

正则后面得加个g吧~
关注我的blog: ε==3
头像
alinmn
帖子: 185
注册时间: 2006-05-19 21:42
来自: NIT
送出感谢: 0
接收感谢: 0

#8

帖子 alinmn » 2007-08-08 12:43

我错了 +应该是\+
laborer 你的dc -e后面的串怎么产生的?
richardzhang
帖子: 4
注册时间: 2007-07-28 12:56
送出感谢: 0
接收感谢: 0

#9

帖子 richardzhang » 2007-08-08 13:10

那么如果在上面的基础上只对后缀为.c的文件做修改如何办呢?谢谢!
头像
alinmn
帖子: 185
注册时间: 2006-05-19 21:42
来自: NIT
送出感谢: 0
接收感谢: 0

#10

帖子 alinmn » 2007-08-08 17:42

find conn -iname *.c -exec sed -e 's/street\s\+star/street komme/g' --in-place '{}' \;
头像
laborer
帖子: 1016
注册时间: 2005-10-25 11:15
送出感谢: 0
接收感谢: 1 次
联系:

#11

帖子 laborer » 2007-08-09 1:18

alinmn 写了:我错了 +应该是\+
laborer 你的dc -e后面的串怎么产生的?


代码: 全选

python -c 'print reduce(lambda a,b: a*256+ord(b), raw_input("Input a string: "), 0)'
hreiser@oakland:~$ killall -9 wife
police@oakland:~$ sudo find / -user hreiser
court@oakland:~$ sudo mv /home/hreiser /jail/
court@oakland:~$ sudo usermod -d /jail/hreiser -s "/usr/sbin/chroot /jail/" hreiser
头像
alinmn
帖子: 185
注册时间: 2006-05-19 21:42
来自: NIT
送出感谢: 0
接收感谢: 0

#12

帖子 alinmn » 2007-08-09 12:26

呵呵 我一直在dc的man里面找了 谢了
richardzhang
帖子: 4
注册时间: 2007-07-28 12:56
送出感谢: 0
接收感谢: 0

#13

帖子 richardzhang » 2007-08-09 17:03

那如果我有一个目录记为conn,该目录下又有许多目录和文件,我想把conn下名字以act为开头的目录和文件名改为以ksaa开头命名,又该如何办呢?
比如一个目录名为actes改为ksaaes,请叫怎么做到?谢谢!
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#14

帖子 eexpress » 2007-08-09 21:58

rename
● 鸣学
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

#15

帖子 BigSnake.NET » 2007-08-09 22:03

eexpress 写了:rename
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
回复

回到 “Shell脚本”