Shell-05 sed

Shell-05

sed命令

Linux文本处理三剑客之sed语句(行编辑—流编辑器 stream editor)

作为行编辑器对文本进行编辑,以行为单位

注意:sed编辑文件,却不改变原文件;

Sed的工作原理:

         在sed里面会提供一个地址空间,在linux的内存中会出现一个模式空间PATTERN SPACE,读取一行

 

 

制定一个文本文件,依次读取文本文件中每行的内容,读取到模式空间中(PATTERN SPACE),在模式空间中进行文本匹配(正则表达式),对匹配后的内容进行修改(替换、删除、打印、修改、保存)

Sed的用法:

sed [option] …{script-only-if-no-other-script} [input-file]

sed [参数] … “sed自己独立的用法格式的语句” [文本文件]

常见选项:

                          -r  指定使用扩展的正则表达式

                                   匹配IP地址

                         1.所有的\都不要

                               2.| 或者

-n     拒绝默认输出

         sed -n ‘1,2p’ 99cfb.sh

-e     script for while if

         for i in {1..9};do echo “$i” sleep 1;done

-f      指定脚本文件

-l      指定文本换行的长度

-i   直接修改文件内容(不要使用)

Sed命令的地址定界方式

  1. 直接匹配数值

Sed -n ‘5,7p’ 99cfb.sh

  1. digit(数字)指定步长 d~步长

sed -n ‘1~3s/j/@/p’ 99cfb.sh

  1. $ 指定行尾

Sed -n ’10,$p’ 文件

                                   Sed -n ‘\fd\,$p’ 文件-----匹配从fd到行尾

              

 

  1. 0,addr ---addr 可以为数字/$/正则表达式
  2. Sed -n ‘0,/k\{5,\}/p’ abc
  3. Sed -n ‘/\(as\)\+/,/\(ds,\)\+/p’ abc
  4. addr,+N

匹配addr行到,addr后N行

Sed -n ‘/fd/,+5p’ abc

  1. addr,-N

sed -n ‘1,~3p’ abc

常见命令:

                  p print 打印 默认在屏幕上显示出来,建议与-n一起使用

                  c 替换行sed “/aaa/c \A” 文件名

                  d 删除  sed “/aaa/d” 文件名   删除匹配到的行

                                   sed “1,3d” 文件名

                  n N 读取/添加 模式匹配到的行的下一行内容在对其进行操作

                  w 保存文件内容到一个新的文件

                  *s* 文本内容替换 默认替换模式空间匹配到的第一项内容

                                   g global 全部/全局

                                  

                                   语法格式:s/pattern/字符串/---中间的斜杠何以替换为任意一个特殊字符

                                    \1 \2 \3…  和正则表达式的分组是相同的,实现反向应用

                                                     指定某一个匹配项进行修改替换

                           -第四行的第三个for替换成if

                        第四行的第三个for替换成if并保存到99xfb.sed.sh

                  i 在匹配行的上一行添加内容

                          sed “/for/i abc ” filename

                  a 在匹配行的下一行添加内容

                          sed “/for/a abc ” filename

    

 

   Grep “testbash” /etc/passwd | Sed “s#^test.*#&er#g”

 

 

例如s###、s@@@、s%%%

sed “s/k/K/gw  /root/aabbcc” abc

sed的高级应用             

D  hold space—占有空间

                 

随机数

                  RANDOM  范围0-32767

                  A=$[$RANDOM%100+1]

         练习:

 

 

  1. cat /boot/grub/grub.conf        sed  ‘s/^[[:space:]]\+//g’ /boot/grub/grub.conf
  2. cat /etc/fstab               sed ‘s/^#[[:space:]]\+//’ /etc/fstab
  3.  echo “/var/log/message | ”sed  ‘s/[^/]\+$//’
  4. echo "/var/log/message" | sed  's#^/.*/##'
  5.  

取出文件路径的路径部分----dirname

取出文件路径的文件部分----basename

 

死循环

while true;do

              循环体

done

break—打断跳出循环

continue----跳出本次循环

sleep----延长多长时间后,继续执行循环

until

       与while用法相同

       区别:只有判断条件为false的时候,才会进入循环语句

练习2:

 

 

#!/bin/bash

cat << EOF

         菜  单

============================

   "CPU)显示cpu信息"

   "Mem)显示内存信息"

   "Disk)显示磁盘信息"

   "Quit)退出"

============================

EOF

 

while true;do

       read -p "请输入需要查看的信息:" info

       echo ""

       if [ -z $info ];then

              echo "请输入一个正确的参数!!"

              echo "例如:CPU Mem Disk Quit"

        #       exit 1

       fi

       if [ $info = "cpu" ];then

              cat /proc/cpuinfo

       elif [ $info = "mem" ];then

              free -m

       elif [ $info = "disk" ];then

              fdisk -l

       elif [ $info = "quit" ];then

              echo "已退出"

              exit  0

       else

              echo "输入信息有误"

              echo "请输入一个正确的参数!!"

             echo "例如:CPU Mem Disk Quit"

              exit 2

       fi

done

 

 

进度条

 

 

Vim .vimrc

编辑vim的一些默认参数

 

 

云桌面

作用:给客户从云端分配PC机,让客户在云端办公;

  1. 安全
  2. 方便

【在vim中,“.”代表光标所在当前行:“.,$s/^/#/-----从光标所在当前行到行尾的开头替换成#”】

1~3 1,4,7,11----步长

/pattern1/,/pattern2----从模式1匹配到的行,到模式2匹配到的行1

数字,+N

/pattern1/,+N------".,+3s/^#//” 从光标所在当前行到后三行的开头替换成空

 

posted @ 2019-08-27 17:39  KAJIA1  阅读(149)  评论(0编辑  收藏  举报