• 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。。。

  • 相关阅读:
    [IDEs]Eclipse For Mac , 常用快捷键
    Songs
    [Android学习笔记]扩展application
    [Android学习笔记]Context简单理解
    Activity组件的生命周期
    [数据结构和算法]快速排序笔记
    关于项目团队管理的几点思考
    【转】一步步教你读懂NET中IL(图文详解)
    【札记】设计的五个原则
    【转】高并发情况下的单例模式
  • 原文地址:https://www.cnblogs.com/sinsenliu/p/8946413.html
Copyright © 2020-2023  润新知