首页 > 代码库 > Linux基础三剑客

Linux基础三剑客

一、grep:文本搜索工具

        -c    只输出匹配的行数

        -i     不区分大小写

        -v    过滤掉包含指定字符串的行

        -s    不显示不存在或无匹配的文本的错误信息

        -w    只显示匹配的整个单词,而不是字符串的一部分

        -n    显示匹配行及行号

        -l      只列出匹配的文件名

        -L     列出不匹配的文件名

            例:

          grep -c root  /etc/passwd    如果包含root字符串在文件中有两行,显示为2

            grep -i root /etc/passwd       显示出root字符串的行,包含其大小写

             grep -v root /etc/passwd      显示除含有root字符串的行

             grep ‘test’ d*            显示所有以d开头的文件中包含test字符串的行

          grep ‘^$‘ /etc/passwd    显示passwd文件中的空行

          grep ‘test‘  aa bb cc        显示在aa,bb,cc文件中匹配test的行

        正则表达式的主要参数:

                    \        忽略正则表达式中特殊字符的原有含义

                    []        单个字符,如[a]即[a]符合要求

                    [-]        范围,如[a-z],即a,b,c一直到z都符合要求

                        grep ‘[a-z]\{5\}‘ aa    显示所有包含每个字符串至少有5个连续小写字符的字符串的行,a-z都可以

                        grep ‘w\(es\)t.*\1‘ aa    如果west被匹配,则es被存储到内存中,并标记为1,然后搜索任意个字符(.*), 这些字符后面紧跟着另外一个es(\1),找到就显示该行。例:west.es  west.esdd.es west.aa.es

                        grep test /mnt/*        目录下搜索带字符串test的文件

                        grep -l test /mnt/*        只列出匹配的文件名

                        grep -L test /mnt/*        列出不匹配的文件名

          [[:alpha:]]        单个字母

          [[:lower:]]        单个小写字母

          [[:upper:]]        单个大写字母

          [[:alnum:]]        单个字母或数字

          [[:punct:]]        单个符号,不包含数字,字母以及空格

          [[:digit:]]            数字

          [[:space:]]        空格

                例:grep ‘5[[:upper:]][[:upper:]]‘ aa        显示以5开头以两个大写字母结尾的行

二、sed:文本处理工具

        -u        展示修改后的文本内容,但不是真的改

        -i          直接修改文件,不显示内容

        sed ‘1d‘ file        删除第一行

        sed ‘2,$d‘ file           删除第二行到最后一行

        sed ‘1a play lol‘ file     第一行后面增加字符串"play lol"

        sed ‘5i go die‘ file        在第5行前添加"go die"

        sed ‘1c Hi‘ file        第一行代替为Hi

        sed -n 2,‘$‘p file        显示第二行到最后一行

        sed ‘s/^.*asd.*$/lizekang/g‘ file    匹配asd字符,并修改整行为lizekang

        sed ‘14c [file]‘ file        修改14行整行为[file]

        sed -n ‘/^\//p‘ file        显示以/开头的行(如果没有-n选项,则显示file中的所有内容和/开头的行两份,-n模式将其他行过滤掉,只显示/开头的行)

        sed ‘/^$/d‘ fiel        删除文件中的空白行

        sed ‘/^#/d‘ file         删除文件开头的#号

        sed ‘s/^[[:spqce:]]*//g‘ fiel        删除文件行首的空格


三、awk:文本分析工具

        -F(分割词):不添加此参数默认以空格分割。

        ‘{print $1}‘ :必要字段,输出具体第几段,$NF表示最后一个元素。

        awk ‘{print NR,$0}‘ 在每行前面加上行号。

        awk ‘{if (NR<=3+1 && NR>=2) print $0}‘ 输出第二行到第四行。

        netstat -an|awk ‘/^tcp/ {++state[$NF]} END {for(i in state) print i,"\t",state[i]}‘

            /^tcp/  滤出tcp开头的记录,屏蔽udp,socket等无关记录。

            state[]   相当于定义一个叫state的数组

            NF        表示记录的字段数         

            state[$NF]   表示数组元素的值,如上就是state[TIME_WAIT]的连接数

            ++state[$NF]    上面的连接数加1

            下面是awk的一些练习:

                1. 用awk 打印整个test.txt (以下操作都是用awk工具实现,针对test.txt);

                        awk ‘{print $0}‘ test.txt

                2. 查找所有包含’bash’的行;

                        awk ‘/bash/‘ test.txt

                3. 用’:’作为分隔符,查找第三段等于0的行;

                        awk -F ‘:‘ ‘$3=="0"‘ test.txt

                4. 用’:’作为分隔符,查找第一段为’root’的行,并把该段的’root’换成’toor’(可以连同sed一起使用);

                        awk -F ‘:‘ ‘$1=="root"‘ test.txt | sed ‘s/root/root/g‘

                5. 用’:’作为分隔符,打印最后一段;

                        awk -F ‘:‘ ‘{print $NF}‘ text.txt

                6. 打印行数大于20的所有行;

                        awk -F ‘:‘ ‘NR>20‘ test.txt

                7. 用’:’作为分隔符,打印所有第三段小于第四段的行;

                        awk -F ‘:‘ ‘$3<$4‘ test.txt

                8. 用’:’作为分隔符,打印第一段以及最后一段,并且中间用’@’连接 (例如,第一行应该是这样的形式 “root@/bin/bash”;

                        awk -F ‘:‘ ‘{print $1"@"$NF}‘ test.txt

                9. 用’:’作为分隔符,把整个文档的第四段相加,求和;

                        awk -F ‘:‘ ‘{(sum+=$4)}; END {print sum}‘ test.txt



本文出自 “11721816” 博客,请务必保留此出处http://zzkkk.blog.51cto.com/11721816/1846979

Linux基础三剑客