`
wx1569488408
  • 浏览: 75069 次
文章分类
社区版块
存档分类
最新评论

学习记录-第二阶段-sed-awk-shell编程-20181027-晚-1028全天

 
阅读更多

###Linux三剑客-SED    字符流编辑器 Stream Editor
    sed --version
    查询多行
        sed -n '1p;3p;5p' person.txt
    ##增加
        #加行  sed '3a xxxxx' person.txt
               sed '3i xxxxx' person.txt
            3a在3行的下一行增加3i在3行的前一行增加
    #$  最后一行
    #!p不显示        sed -n '/^$/!p' person.txt 
            sed '$!d' person.txt 不是最后一行的都删除
            awk '!/^$/' person.txt awk的!加前面
    #替换
        s替换这一行中第一个找到的字符串
        g(global)每一行进行全局替换-->s
        i    i.bak/i.ori    表示先备份源文件再修改源文件内容
        #sed中使用变量
            x=oldboy
            y=oldgirl
            sed "s#$x#$y#g" person.txt   一定要注意用"",' '变量不能转化
        单引号:所见即所得    双引号:与单引号类似,特殊符号会被解析 $ $() `` !
    #反向引用    \1第一个小括号中的匹配内容    \2第二个小括号中的匹配内容 sed最多可记9个。
  #ip a s eth0查看eth0网卡信息
#sed 总结 
            sed      找谁                 (!不)干啥

                具体的行号            p--print 显示    与-n一起使用
                正则/oldboy//^101/    增加 a--append 追加/i--insert 插入
                范围1,4                删除d--delete
                范围/101/,/104/        替换s--substitute

###Linux三剑客-awk
取列 取行  #统计   计算
    awk --version
    awk 参数    '条件(找谁){干啥}' 文件
        创建环境
        mkdir -p /server/files/
        cat >>/server/files/reg.txt<<EOF
        Zhang Dandan    41117397   :250:100:175
        Zhang Xiaoyu    390320151  :155:90:201
        Meng  Feixue    80042789   :250:60:50
        Wu    Waiwai    70271111   :250:80:75
        Liu   Bingbing  41117483   :250:100:175
        Wang  Xiaoai    3515064655 :50:95:135
        Zi    Gege      1986787350 :250:168:200
        Li    Youjiu    918391635  :175:75:300
        Lao   Nanhai    918391635  :250:100:175
        EOF
    #正则表达式    awk有两个表示的意思不太一样。
        ^    字符串开头
                例:匹配所有以oldboy开头的字符串  /^oldboy/
                    匹配所有第三列中以oldboy开头  $3~/^oldboy/
        $    字符串结尾
                例: 匹配所有以oldboy结尾的字符串  /oldboy$/
                    匹配第三列中以oldboy结尾的文本(字符串) $3~/oldboy$/
        ##思路,先想条件,通过条件的数据再去操作。
            awk '/Xiaoyu/' reg.txt = awk '$0~/Xiaoyu/' reg.txt
        #显示Xiaoyu的姓氏和ID号码 
            awk '$2~/Xiaoyu/{print $1,$3}' reg.txt 
        #显示所有以41开头的ID号码的人的全名和ID号码
            awk '$3~/^41/{print $1,$2,$3}' reg.txt
        #显示所有ID号码最后一位数字是1或5的人的全名
            awk '$3~/[15]$/{print $1,$2}' reg.txt
            awk '$3~/(1|5)$/{print $1,$2}' reg.txt
        #显示Xiaoyu的捐款.每个值时都有以$开头.如$520$200$135
            #awk中的替换 gsub(替换substitution  awk gsub;sed sg)
               (gsub中的g和sg中的g一样,都是代表整行,不加为第一个)
                gsub(/目标/,"替换为什么",第几列)
            awk '{gsub(//,"",$4)}' reg.txt
            awk '{gsub(/:/,"$",$4);print}' reg.txt    没有默认输出
            awk '$2~/Xiaoyu/{gsub(/:/,"$",$4);print $4}' reg.txt
        #gsub为函数,相当于awk中的命令
    #awk进行统计计数公式    #特殊模式BEGIN和END
    BEGIN{} BEGIN里面的内容,会在awk读取文件内容之前运行
        测试、计算(用的少)
    #END{}***  END{}里面的内容,会在awk读取完文件的最后一行之后运行。    
        一般是用来显示最终结果的。(用的多)
        先计算,END显示结果。

        #统计/etc/services文件里面的空行数量
            awk '/^$/{i=i+1}END{print i}' /etc/services
        #公式i=i+1 一般用于统计
            awk '/^$/{i=i+1;print i}' /etc/services
            简化公式:i++

            
            
    #awk数组-统计与计算
        
        处理以下文件内容,将域名取出并根据域名进行计数排序处理:(百度和sohu面试题)
        http://www.etiantian.org/index.html
        http://www.etiantian.org/1.html
        http://post.etiantian.org/index.html
        http://mp3.etiantian.org/index.html
        http://www.etiantian.org/3.html
        http://post.etiantian.org/2.html
        

    #secure系统日志分析练习
     谁在破解你的密码(Failed passwdword 每个ip地址出现的次数)
     分析系统的每个用户被破解的次数


    总结:
    1.awk数组进行统计(最核心)
      i=i+1  == i++    统计次数
      i=i+$n == i+=$n 累计相加 累加
    2.awk执行过程
    3.awk通过正则作为模式
    4.BEGIN和END特殊模式


#####linux编程
    cat /etc/shells 可以查看命令解释器种类。
    file命令查看是否是shell脚本。
    脚本第一行 #!/bin/bash #!称为幻数  能被内核识别  也可以#!/bin/sh
    第二行 #desc:  描述
    第三行 #author: 作者
    第四行 #time:    时间
    第五行 #version: 版本
  ###变量        
    #普通变量  字母、数字、下划线组成    必须以字母或下划线开头
           驼峰语法:首个单词字母小写,其余单词首字母大写 oldboyAgeSex=1
        week=10;echo ${week}day
        $week实际上就是${week}。
    #全局变量/环境变量    大写,linux里面哪里都可以用。
                在创建他们的shell及其派生出来的子Shell中使用(如脚本中)
                    另开一个shell和su到别的用户都不行。
        env命令 只显示全局变量
      取消变量:unset OLDBOY (普通全局都可以)
    
        #与用户环境变量有关的文件/目录
            #全局环境变量配置文件
            /etc/profile(基本只要这个)   /etc/bashrc  
            /etc/profile.d(用户登录到系统,会运行这个目录下面的脚本)
                脚本要有执行权限(profile.d里的)
            #用户环境变量配置文件 ~/profile ~/bashrc
    #特殊变量
        #位置变量 
            $0:脚本的名字 
            $n(n代表数字) :第n个参数
                $1:第一个参数
            $#:参数的个数(脚本一共有多少个参数)
                [root@oldboyedu-01 scripts]# sh show-arg.sh  a b c
                $0:show-arg.sh $1$2$3:a b c $#:3

        #进程状态变量
            $?:显示上一个命令的执行结果。
                命令执行正确 结果0
                命令执行错误 结果非0
    #如何向变量中放内容
        #直接给出
            sh show-arg.sh 10 20
        #找别人要-read读入    read -p "input x y:" x,y
            read得到的输入默认存储在变量REPLY
            -p “提示语句”,则屏幕就会输出提示语句
            -t 等待时间
            -s 关闭回显,用于密码输入。
  ###循环
    #条件表达式        明天是否下雨  下雨/不下
        #判断文件    
            好习惯:先敲一对[],然后退格输入2个空格,最后再回退一个空格
                    开始输入[ -f /etc/hosts ]([]两边必须有空格才生效)
            -f    文件是否存在     0存在  1不存在
            -d    目录是否存在    0存在  1不存在

        #判断整数
            等于equal:-eq    [1 -eq 1]
            不等于not equal:-ne [ 1 -ne 10 ]    
            大于greater than:-gt [ 2 -gt 1 ]
            大于等于greater equal:-ge 
            小于less than:-lt
            小于等于less equal:-le
          简单案例:判断命令行参数个数等于2.
    #if条件语句
        #单分支条件语句
            if [ $num1 -gt $num2 ];then
                echo $num1 greater than $num2
            else
                echo $num1 less than $num2
            fi
    
        #语法
            if [ $num1 -gt $num2 ];then
                echo $num1 greater than $num2
            else
                echo $num1 less than $num2
            fi
小结:
1.条件表达式
[ -d /oldboy ]
[ -f /oldboy/oldboy.txt ]
[ 10 -gt 9 ]   great than >
[ 10 -ge 9 ]   great equal >=
[ 10 -eq 10 ]  equal      ==
[ 10 -ne 9 ]   not equal  !=
[ 9 -lt 90 ]   less  than <
[ 9 -le 90 ]   less  equal <=
可以 man test
其实 [ -d /oldboy ] === test -d /oldboy (现在这个用的少了,但是看[]的参数可以man test)
2.判断
单分支判断
判断脚本的参数个数不是2就退出。

双分支判断
if [ $1 -gt $2 ];then
   echo  $1 bigger than $2
else
   echo  $1 not bigger than $2
fi

如果 [ $1 -gt $2 ];然后
   echo  $1 bigger than $2
那么
   echo  $1 not bigger than $2
果如

    #for循环语句
        格式
        for 变量名字 in 列表
        do
            命令
        done

        
        for num in 1 2 3 4 5 6 7
        do
            echo "the $num number is :$num"
        done

        
        
        for num in {1..100}
        do
            echo "the $num number is :$num"
        done
    练习:优化linux的开机启动项目
        只保留crond;sshd;network;rsyslog;sysstat,其他的都关闭。

    for chk in `awk '!/crond|sshd|network|rsyslog|sysstat/{print $1}' chkconfig.txt`
do
#               echo $chk off(第一遍先echo检查)
                chkconfig $chk off
done


#执行脚本调试技巧
-x显示过程
[root@oldboyedu-01 scripts]# sh -x ip.sh 
+ date +%F_%w
2018-10-28_0
+ awk -F '[: ]+' 'NR==2{print $4}'
+ /sbin/ifconfig eth0
10.0.0.200

+:后接命令
没有+:显示在屏幕上。

总结:
1.特殊变量 位置$1 $2 $0 状态$? 其他$#
2.普通变量命名规则
3.普通变量与环境变量区别
4.与用户有关的文件和目录        
5.条件表达式,判断,循环
6.优化系统启动项目
7.批量添加用户并设置随机密码    
        

转载于:https://my.oschina.net/u/4005625/blog/2253664

分享到:
评论

相关推荐

    sed-4.2.1.rar包括sed-4.2.1-setup.exe、sed-4.2.1-dep.zip、sed-4.2.1-bin.zip

    **sed工具介绍** `sed` 是“流编辑器”(Stream Editor)的缩写,它是一种功能强大的文本处理工具,广泛应用于Linux和Unix系统中。`sed` 可以读取数据流,对输入的数据进行各种操作,如替换、删除、插入等,并将...

    Sed AWK编程指南

    Sed AWK编程指南Sed AWK编程指南Sed AWK编程指南

    sed命令和awk编程教程

    sed命令和awk编程教程,理论与示例相结合。

    shell编程,sed,awk,grep等教程整理

    本文将深入探讨shell编程,以及与之紧密相关的sed、awk和grep命令,这些都是Linux系统中进行文本处理和数据操作的重要工具。 首先,让我们了解什么是Shell编程。Shell是操作系统提供的一个接口,允许用户与系统内核...

    awk&amp;sed 详解

    awk&sed 详解 shell awk&sed 详解 shell awk&sed 详解 shell awk&sed 详解 shell awk&sed 详解 shell awk&sed 详解 shell

    sed & awk 第二版 例程 源代码 源码 sed & awk sourcecode

    《sed与awk 第二版 例程 源代码》是一部深入探讨文本处理工具sed和awk的经典著作。这本书的核心在于其丰富的例程和源代码,旨在帮助读者掌握这两个强大的命令行工具的用法。sed(流编辑器)和awk(编程语言)在IT...

    shell编程-awk,sed,crontab

    在Linux系统中,Shell编程是系统管理员和开发者日常工作中不可或缺的一部分。它允许用户通过命令行接口执行各种自动化任务。在给定的压缩包文件中,我们聚焦于三个关键的Shell工具:awk、sed和crontab。下面将详细...

    Linux主要shell命令、sed、awk使用详解

    Linux 主要shell命令、sed、awk使用详解 Linux 主要shell命令详解 shell 是用户和 Linux 操作系统之间的接口。Linux 中有多种 shell,其中缺省使用的是 Bash。本章讲述了 shell 的工作原理,shell 的种类,shell ...

    shell基础+sed+awk的使用

    学习shell时做的笔记,包含sed,awk,sort,uniq的使用

    shell编程指南,shell脚本,本书共分五部分全。grep家族,sed,AWK,正则表达式,tr用法

    Linux与unix shell编程指南.rar 第一部分 shell 第1章 文件安全与权限 1 第2章 使用find和xargs 14 第3章 后台执行命令 22 第4章 文件名置换 31 第5章 shell输入与输出 34 第6章 命令执行顺序 46 第二部分 文本过滤...

    sed与awk(第二版)学习笔记

    sed与awk(第二版)学习笔记

    Shell脚本专家指南.sed与awk第二版.shell十三问

    本文将深入探讨"Shell脚本专家指南"、"sed与awk第二版"以及"shell十三问"这三份文档所涵盖的重要知识点。 首先,"Shell脚本专家指南"详细介绍了如何编写高效且实用的Shell脚本。这包括了对Bash Shell的深入了解,如...

    Sed与awk_中英文高清版

    《Sed与Awk》是IT领域中关于文本处理的经典之作,主要讲解了两种强大的命令行工具:Sed(流编辑器)和Awk(数据处理语言)。这两款工具在Linux和Unix系统中广泛使用,尤其适用于数据提取、转换、报告生成等任务。 ...

    Linux Shell脚本编程--sed命令详解.zip_shell sed_命令介绍_脚本 shell

    shell编程中经常用到sed命令,本文详细介绍了shell常用命令sed详细用法

    Shell、awk、sed面试题汇总(无答案).doc

    8. 数据排序:可以使用 awk 命令来对数据进行排序,例如按照第二列排序。 sed 9. 行号打印:可以使用 sed 命令来打印文件的行号,例如 `sed '=' file`。 10. 空行打印:可以使用 sed 命令来打印文件的空行,例如 `...

    Shell编程-字符截取命令-cut printf awk sed 命令

    详细介绍了Shell编程中字符截取命令-cut printf awk sed。每一步都有详细操作演示,并附有截图。适合初学者。

    Sed与awk第二版(高清版).pdf

    Sed与awk第二版(高清版).pdf

    sed与awk(第二版)

    通过学习《sed与awk(第二版)》,读者不仅能熟练掌握这两个工具,还能提升在数据处理、日志分析、脚本编程等方面的能力,为日常的Linux/Unix系统管理提供极大的便利。无论是系统管理员、程序员还是数据分析人员,这...

    linux-Shell编程视频教程

    11.2.3 Shell编程-字符截取命令-awk命令.mp4 11.2.4 Shell编程-字符截取命令-sed命令.mp4 11.3 Shell编程-字符处理命令.mp4 11.4 Shell编程-条件判断.mp4 11.5.1 Shell编程-流程控制-if语句.mp4 11.5.2 Shell...

    sed和awk的必备书籍

    包括: 1. sed与awk+第三版(中文高清晰),内容非常全面详细,看了觉得很不错,学习sed和awk的必备书籍。 2. Effective awk Programming, 4th Edition 3. Sed与awk第二版(高清版).pdf

Global site tag (gtag.js) - Google Analytics