16 shell脚本--007三剑客之sed

1、sed  (Stream SDite)

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

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

  (1)sed的工作原理:

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

  (2)常见选项:

      -n  不显示默认输出的内容

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

        匹配IP

          1、所有的 都不要

          2、|  ----> 或者

      -e  script  

      -f    指定脚本文件

      -l    指定文本换行的长度?

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

  (3)地址定界

      1、直接匹配数值

        sed -n '5,7p' 文件   ?

      2、d(数字)~步长

        sed -n '1~3p'  文件

      3、$  指定行尾

        sed -n '10,$p' 文件

      4、/正则/

        /正则1/,/正则2/

        sed -n '/fd/,$p' 文件   //fd是文件某一行的内容

      5、0,addr

        addr可以为数字/$/正则表达式

        sed -n '0./k{5,}/p' 文件

      6、addr,+N

        匹配addr行到addr后N行

        sed -n '/fd/,+5p' 文件

      7、addr,-N

  (4)、常见命令

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

      c   替换行

         sed "/aaa/c A“  文件

      i  添加  在指定行的上一行添加内容

        sed -n "/for/i abc" 文件    在for的上一行添加abc

      a  添加  在指定行的下一行添加内容      

      d   删除

         sed ”1,3d“文件

         sed ”/aaa/d“  文件

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

      w  保存

        sed "/pattern/w 新的文件名"  原来的文件名

      s   文本内容替换

          语法格式:s/pattern/字符串/

               扩展:中间的 / 可以替换成任意一个字符,例如:s###  s@@@  s%%%

      g  全部匹配

        sed "s#k#K#gw /root/text.txt" 文件    //把全部小k替换成大K,然后保存到/root/text.txt

        /1 /2  和正则表达式的分组相同,实现相反应用

      &   调用前面匹配的内容

        sed "s/^bash.*/&er/g"  文件    //在以bash开头的行,后面加er

        

    dirname        //取目录名

    basename    //取文件名

for
for 变量 in 列表;do
循环体
done

for((初始语句; 判断语句; 值变化语句)); do
循环体
done

case
分支
case 变量 in
PAT1)
执行语句
;;
PAT2)
执行语句
;;
*)
默认执行语句
;;
esac

while
循环
格式:

定义初始值
while 条件判断 ; do
循环体
值变化语句
done

其他两种特殊的语句格式:
for i in $(cat /etc/passwd &> /dev/null) 错误写法

while read 变量;do
循环体($变量)
done << /path/filename

就是任性 -- 要写死循环
while true ; do
循环体
done

break 跳出循环
continue 跳出本次循环
sleep 延长多长时间后,继续向下执行命令

until
循环
与 while 用法想用
区别:只有 判断条件为 False 的时候,才会进入循环语句;
。。

if
if 条件判断 ;then
执行语句
fi

if 条件判断 ;then
执行语句1
else
执行语句2
fi

if 条件判断; then
执行语句1
elif 条件判断 ; then
执行语句2
elif 条件判断 ; then
执行语句3
else
执行语句4
fi

---------------------------------------------------------------------------

if语句的写法:
case语句的写法:

read

cpu
cat /proc/cpuinfo
mem
free -m
disk
fdisk -l
quit
echo ""
exit 0

原文地址:https://www.cnblogs.com/wx00/p/11362805.html