NO8 find结合sed查找替换企业案例多方法精讲&命令总结!

·sed    #替换  eg: sed 'sed 's#已有的内容#更改的内容#g' oldboy.txt
                   s 代表替换,g代表全局,sg就是全局替换
                   ### 分隔符,可用任意符号替代,但一般用#或/,@。
          一、sed命令:
                 g: 与s联合使用时,表示对当前行全局匹配替换。
                 s: 常说的查找并替换,用一个字符串替换成另一个。
          二、sed选项:
                -e:允许多项编辑。
                -i:修改文件内容。

例子:
·sed 's#oldgirl#jabbok#g' oldboy.txt
·sed 's#已有的内容#更改的内容#g' oldboy.txt
 s###g: s 代表替换,g代表全局,sg就是全局替换
             ### 分隔符,可用任意符号替代,但一般用#或/,@。
       
[root@localhost ~]# echo 'oldboy oldgirl' >oldboy.txt
[root@localhost ~]# cat oldboy.txt
oldboy oldgirl
[root@localhost ~]# sed 's#oldgirl#jabbok#g' oldboy.txt
oldboy jabbok
[root@localhost ~]# cat oldboy.txt        (上面只改了输出,没改文件内容)
oldboy oldgirl
[root@localhost ~]# sed -i 's#oldgirl#jabbok#g' oldboy.txt   (改内容要加-i)
[root@localhost ~]# cat oldboy.txt
oldboy jabbok

·练习:
[root@localhost data]# echo 'oldboy sinsen           (echo命令写入多行)
> oldgirl jabbok
> oldman aden'>>oldboy.txt
[root@localhost data]# cat oldboy.txt
oldboy sinsen
oldgirl jabbok
oldman aden 
[root@localhost data]# sed -e 's#old#new#g' oldboy.txt   (这时还没有改文件内容)
newboy sinsen
newgirl jabbok
newman aden
[root@localhost data]# cat oldboy.txt
oldboy sinsen
oldgirl jabbok
oldman aden
[root@localhost data]# sed -i 's#old#new#g' oldboy.txt    (加-i才是改文件内容)
[root@localhost data]# cat oldboy.txt
newboy sinsen
newgirl jabbok
newman aden

·问题十三:把。oldboy目录及其子目录下所有以扩展名.sh结尾的文件中包含oldboy的字符串全部替换为newboy。【附加题:加分题】。
·解答:
·建立测试:
[root@localhost /]# mkdir -p oldboy/test/a/b/c/d
[root@localhost /]# tree /oldboy
/oldboy
└── test
    └── a
        └── b
            └── c
                └── d

5 directories, 0 files
[root@localhost /]# cd /oldboy
[root@localhost oldboy]# echo "oldboy" >test/del.sh
[root@localhost oldboy]# echo "oldboy" >test.sh
[root@localhost oldboy]# echo "oldboy" >t.sh
[root@localhost oldboy]# echo "oldboy" >.sh
[root@localhost oldboy]# tree
.
├── test
│   ├── a
│   │   └── b
│   │       └── c
│   │           └── d
│   └── del.sh
├── test.sh
└── t.sh

5 directories, 3 files
[root@localhost oldboy]# find /oldboy -type f
/oldboy/test/del.sh
/oldboy/test.sh
/oldboy/.sh
/oldboy/t.sh
[root@localhost oldboy]# touch a b c.txt        (创建其他类型文件)
[root@localhost oldboy]# find /oldboy -type f   (查找所有文件)
/oldboy/test/del.sh
/oldboy/test.sh
/oldboy/.sh
/oldboy/t.sh
/oldboy/a
/oldboy/b
/oldboy/c.txt
[root@localhost oldboy]# find /oldboy -type f -name "*.sh"   (查找.sh结尾的文件)
/oldboy/test/del.sh
/oldboy/test.sh
/oldboy/.sh
/oldboy/t.sh
[root@localhost oldboy]# find /oldboy -type f -name "*.sh"|xargs cat  (查看.sh类型文件里的内容,要把数据当作目标文件处理必须加xargs)。
oldboy
oldboy
oldboy
oldboy
[root@localhost oldboy]# find /oldboy -type f -name "*.sh"|cat  (不加xargs,就直接时当作数据流)
/oldboy/test/del.sh
/oldboy/test.sh
/oldboy/.sh
/oldboy/t.sh
这个效果相当于:
[root@localhost oldboy]# find /oldboy -type f -name "*.sh"|xargs  (先找到.sh类型文件)
/oldboy/test/del.sh /oldboy/test.sh /oldboy/.sh /oldboy/t.sh
[root@localhost oldboy]# cat /oldboy/test/del.sh /oldboy/test.sh /oldboy/.sh /oldboy/t.sh  (再查看.sh文件里的内容)
oldboy
oldboy
oldboy
oldboy

·如何把.sh类型文件里的oldboy替换成newboy呢?
[root@localhost oldboy]# find /oldboy -type f -name "*.sh"|xargs sed 's#oldboy#newboy#g'
newboy
newboy
newboy
newboy
[root@localhost oldboy]# find /oldboy -type f -name "*.sh"|xargs sed -i 's#oldboy#newboy#g'  (经过上面改过输出后再加-i改文件内容)
[root@localhost oldboy]# find /oldboy -type f -name "*.sh"|xargs cat   (查看改后的内容)
newboy 
newboy
newboy
newboy

方法二:
[root@localhost oldboy]# sed -i 's#old#new#g' `find /oldboy -type f -name "*.sh"`
[root@localhost oldboy]# find /oldboy -type f -name "*.sh"|xargs cat
newboy
newboy
newboy
newboy
相当于:sed -i s#old#new#g /olddboy/test/del.sh /oldboy/test.sh /oldboy/.sh /oldboy/t.sh
本文考试看似简单,实际上,考察了一个合格运维人员的命令基本功,大多数人不容易给出3种以上答案。

总结:
1     mkdir       # 创建目录 -p递归
2     touch       # 创建文件
3     ls             # 查看列表目录
4     cd            # 切换目录
5     echo        # 打印
6     cp            # 拷贝目录 -r递归  -a(dpr)
7     vi             # 记事本
8     head        # 头部。查看前N行,默认前10,-n数字
9     rm            # rm -f force  -r 目录
10   cat           # 查文件内容
11   remdir      # 删除空目录
12   grep         # 过滤 -v 排除
13   find          # 查找 -type f   -name "名字"  -mtime =7,7 -7
14   sed          # 增删改查  -i修改  -n取消默认输出  -e多项编辑
                          p  s  g
15   alias        # 修改和设置别名,查看
16   unlias      # 取消别名
17   xargs       # 从标准输出读入创建执行命令 -n 输入数字:分组
18   awk         # -F 指定分隔符  NR行号  {print $1 $2}
19   seq         # sequence 打印序列 
                      -s指定分隔符
                      seq 10 默认每个数字后键入回车,就是竖着排
                     [root@localhost oldboy]# seq -s "=" 10
                    1=2=3=4=5=6=7=8=9=10
20   pwd        # 打印当前目录
21   tree        # 显示目录树。安装:yum install tree -y
22   tr        
23   tail         # 尾部 查看后N行,默认后10,-n数字
24   vim        # 复杂编辑器,一般用于开发(写shell,python)
25   mv        # 移动目录或文件名,改名

必须掌握的命令:
man,touch,ls,mkdir,cp cd,rm,mv,echo,pwd,cat,alias,unalias,head,tail,tree,rmdir,find,xargs,awk,sed,grep,vi,vim,seq。。。

上一篇:【DFS】求水洼的数目


下一篇:Html 和 Css 的杂乱总结