sed -i "s/\/statics\/images\//&statics\/images/g" `grep statics/images// -rl /test`
把test目录下/statics/images// 替换成 /statics/images/
find /home/data/ -name "*.ini" -exec sed -i 's/\<zhangsan\>/lisi/g' {} \;
sed -i "s/\/home\/wwwroot/\/home\/data\/ftp\/web/g" `grep /home/wwwroot/ . -rl`
把当前目录下所有文件的/home/wwwroot路径 替换成 /home/data/ftp/web/ 路径
sed 's/html/php/g' 123.html
--------------------------------------------------------------------------------------------------
比如,要将目录/modules下面所有文件中的zhangsan都修改成lisi,这样做:
sed -i "s/zhangsan/lisi/g" `grep zhangsan -rl /modules`
解释一下:
-i 表示inplace
edit,就地修改文件
-r 表示搜索子目录
-l 表示输出匹配的文件名
这个命令组合很强大,要注意备份文件。
(1)sed 'y/1234567890/ABCDEFGHIJ/'
test_sed
sed 'y/1234567890/ABCDEFGHIJ/'
filename
ABCDEFGHIJ
BCDEFGHIJA
CDEFGHIJAB
DEFGHIJABC
注意变换关系是按两个list的位置对应变换
其中:test_sed的内容是:
1234567890
2345678901
3456789012
4567890123
(2)
替换每行所有匹配
sed 's/01/Ab/g' test_sed
1234567890
23456789Ab
3456789Ab2
456789Ab23
注意:第一行的0,1没有分别替换为A,b
7. 脚本
Sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔,在命令的末尾不能有任何空白或文本,如果在一行中有多个命令,要用分号分隔。以#开头的行为注释行,且不能跨行。
8. 小技巧
-
在sed的命令行中引用shell变量时要使用双引号,而不是通常所用的单引号。下面是一个根据name变量的内容来删除named.conf文件中zone段的脚本:
name='zone\ "localhost"'
sed "/$name/,/};/d" named.conf
sed -i "s/oldstring/newstring/g" `grep oldstring -rl
yourdir`
例如:替换/home下所有文件中的www.bcak.com.cn为bcak.com.cn
sed -i "s/www.bcak.com.cn/bcak.com.cn/g"
`grep
www.bcak.com.cn
-rl
/home`
正则表达式:
cat passwd | grep ^root ^表示以某个关键字开头,不加^表示包含匹配
cat passwd | grep [^a-zA-Z] 表示匹配非字母内容
cat passwd | grep ^[a-zA-Z] 表示匹配字母内容且以字母开头
cat passwd | grep ^[0-9] 表示匹配以数字开头行
cat passwd | grep -w root 表示精确匹配
grep -E "root|named" passwd -E 表示扩展字符 可以同时匹配多个关键词
grep -c "root" passwd 统计该关键词行数,和-E可以结合起来用
-i 忽略大小写 ,ignore的意思
grep -l root * -R -l表示打印文件名,root关键词,*表示当前目录下, -R 递归 应用场景,不知道
关键字在那个文件中
-n 显示关键词所在行号
-v 取反
-x 精确匹配整行
grep 如果有匹配到内容,则echo $? 为0,相反为非0