Linux三剑客与管道及正则

linux常用工具:

        1.正则:正则表达式是记录文本规则的代码。  在线正则表达式测试

        2.管道符“|”,用于连接两个命令间的输出与输入,管道符“|”左边的命令的输出会作为管道符“|”右边命令的输入。

         echo "hello world" | grep hello

        3.grep,sed,awk为三剑客,对文本进行处理。

                1).grep  根据用户指定的模式(pattern)对目标文本进行过滤,显示被匹配到的行。

                        -v  显示不被pattern匹配的行---》grep -nv root test.txt:文件中不包含root的行数

                        -i  忽略字符大小写

                        -n  显示匹配的行号------》grep -n root test.txt:查找文件中包含root的行数

                        -c  统计匹配的行数

                        -r 递归搜索

                        -o  仅显示匹配到的字符串

                        -E  使用grep -E,相当于egrep,在使用正则匹配时用到此参数:grep -E "w{3}" test.sh

                        查找以R开始,以\结尾的行

            判断当前用户在文件中是否存在,存在就打印exist,不存在打印 not exist

      /dev/null  :linux中的垃圾箱位置             

        将未报错的输出扔进垃圾箱:>> /dev/null

         不管报错与否都扔进垃圾箱:&> /dev/null

                2).sed   流编辑器,对文件逐行处理

                2种形式:        sed opcf

                       1. sed [OPTION] “pattern command" file

                                如: sed -n "2 p" passwd

                        OPTION:

                                -n        只打印模式匹配的行

                                -f        加载存放“动作”的文件

                                -r        支持拓展正则

                                -i        直接修改文件(真正修改生效的)

                        pattern:

                                5        只处理第5行

                                5,10        只处理第5行到第10行

                                /parttern/     只处理能匹配pattern的行

                                /parttern1/,/pattern2/     只处理能匹配pattern1行到pattern2行的行

                        command(增删改查):       

                        新增

                                a   在匹配行后新增    sed -n '4a i love you'  passwd

                                                                        在第四行后面新增一行i love you;

                                i    在匹配行前新增   sed -n '4i I love you'  passwd 

                                                                        在第四行前面插入一行I love you; 

                                r   外部文件读入,行后新增

                                w  匹配行写入外部文件

                        删除

                                d   sed -n '2,5d'  passwd  将第2~5行删除;

                        修改

                                c   整行替换  sed -n '2,5c i love you'   将第2至第5行的数据以i love you替换;

                                 s  词替换  sed -n 's/old_word/new_word/g'   passwd 

                                                                        将全局的old_word替换为new_word.

                                                sed -n 's/old/new/'        只修改匹配行中第一个old为new

                                                sed  -n 's/old/new/ig.   忽略大小写全部替换

                        查询

                                p  打印    sed -n '/root/ p' passwd

                        示例:

       sed -n "2 p" passwd:对匹配的行做打印操作

       匹配含有daemon的行: sed -n "/daemon/  p" passwd  ---->/xxxword/ 单词用//包裹

       匹配打印mail开头到ntp开头的行:sed -n "/^mail/,/^ntp/ p" passwd 

                       2. some command | sed sed [OPTION] “pattern command" file

                        sed -h  帮助文档   向下翻:j

                                                      向上翻:k

                                                      下一个关键字:n

                                                      上一个关键字:N

                        sed -i 's/old_word/new_word/g' test.txt  以修改文件内容的形式将

                                                        文件内全局的old_word替换为new_word.

                        a:新增    sed -e '4a i love you'  在第四行后面新增一行i love you;

                        c.取代    sed -e '2,5c i love you'   将第2至第5行的数据以i love you替换;

                        d.删除    sed -e '2,5d'    将第2~5行删除;

                        i:插入修改     sed -e '4i I love you'   在第四行前面插入一行I love you; 

                        p:打印    sed -n '/root/p'

                        s:取代     sed -e 's/old_word/new_word/g'   将全局的old_word替换为new_word.

                3).awk :文本处理工具,处理数据并生成结果报告,对列进行处理。

                把文件逐行读入,以空格为默认分隔符将每行切片,切开的部分再进行后续处理

                2种形式: awk opcf

                        awk 'BEGIN{} pattern{commands} END{}' file

                                包裹pattern的必须是单引号‘ ’

                        some command | grep [option] [pattern]

                awk 'pattern {action}' test.txt

                        pattern  正则表达式

                        action   对匹配到的内容需要执行的命令(默认为输出每行内容)

                        test.txt   awk浏览的文件名

                        BEGIN  处理文本前要执行的操作

                        END    处理文本后要执行的操作

                内置变量

                        $0                                                整行内容

                         $1~$n                                       当前行的第1~n个字段

                        NF(Number Field)                      当前行字段数

                        NR(Number Row)                       当前行行号,从1开始

                        FS(Field Separator) /-F              输入字段分割符,默认为空格/tab键

                        RS(Row Separator)                    输入行分割符,默认为回车符

                        OFS(Output Field Separator).   输出字段分割符,默认为空格

                        ORS(Output Field Separator).   输出行分割符,默认为回车符                    

                awk -F: '/root/ {print $7}' /etc/passwd

                        1.awk 按行处理/etc/passwd文件中的每行数据;

                        2.将读取出的每行数据按“:”分割成域;

                        3.将每行经分割后的所有数据匹配正则/root/,匹配包含root的行;

                        4.将匹配到的行执行print $7操作,即打印第7域(列),得出最后数据。

             awk -F: 'NR==2{print $0}' /etc/passwd

                        1.awk 按行读取passwd文件中所有数据;

                        2.读取的数据按“:”分割为域;

                        3.匹配NR==2,第二行数据,并打印整行所有数据print $0.

awk -F: 'BEGIN{print "i love you"} {print $6,$7} END{print "do you love me?"}'  /etc/passwd

                        BEGIN  处理文本前要执行的操作

                        END    处理文本后要执行的操作

根据pid查看某进程所占用内存%MEM百分比 

awk 操作passwd文件:

 $0   整行内容

awk 查看文件内容 awk '{print $0}' passwd

 $1~$n     当前行的第1~n个字段

NF(Number Field)  当前行字段数

NR(Number Row)     当前行行号,从1开始

FS(Field Separator)   输入字段分割符,默认为空格/tab键

                利用NF取出最后一列数据

                 打印第1个字段和最后一个字段

                RS(Row Separator)    输入行分割符,默认为回车符

                OFS(Output Field Separator).   输出字段分割符,默认为空格

                ORS(Output Field Separator).   输出行分割符,默认为回车符

格式化输出:printf 会将空格和回车键都去除

        格式符:                含义

                %s               字符串

                %d               十进制数字

                %f                浮点数

        修饰符                  含义

                +                 右对齐

                -                 左对齐

 格式化:\n换行

                /t 指标符

                 %40s 占40个字符,默认右对齐,未占用的用空格代替

                 左对齐        

 打印包含“chuntian"的行的第1列和最后1列数据

打印mail 到 games的行

需求:取出第6列中含bin的行 

使用正则匹配包含/bin的行

 使用正则匹配第6列包含/bin的行

匹配行后打印总共有几行

AWK 语法:

        将awk命令写入文件,通过文件载入命令

        vim test.awk. 建议按照此格式写,不然可能报错。

BEGIN{
        FS=":"
        printf "%-20s\t%-20s\n","User","Status"
}

{
        if ($6 ~ "bin")
                {
                count++
                printf "%-20s\t%-20s\n",$1,$NF
                }
}

END{
        printf "%-20s\t%-20s\n","Total:",count
}

效果:

通过awk -f 参数加载命令文件。 

awk 语法2:

        统计每个用户的 数量

BEGIN{
	FS=":"
	printf "%-20s\t%-20s\n","User","Total"
}

{
	USER[$1] += 1
}

END{
	for (u in USER)
		printf "%-20s\t%-20s\n",u,USER[u]
}

效果:

 统计日志中每位用户成功数和失败数

BEGIN{
	FS=":"
	printf "%-20s\t%-20s\t%-20s\n","User","Success","Fail"
}

{
	if ($5 == "pass")
	{
		SUCCESS[$4] += 1
	} else
	{
		FAIL[$4] += 1
	}

	USER[$1] += 1
}

END{
	for (u in USER)
    {
		ALL_SUCCESS += SUCCESS[u]
		ALL_FAIL += FAIL[u]
		printf "%-20s\t%-20s\t%-20s\n",u,SUCCESS[u],FAIL[u]
	}
	printf "%-20s\t%-20s\t%-20s\n","Total",ALL_SUCCESS],ALL_FAIL
}

 效果:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chuntian_tester

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值