文本匹配

head -n[nume] 显示文件的开始几行
tail -n[nume] 显示文件的最后几行
     -f        实时监控文件日志
     
wc    统计字符
    -l 统计函数
    -w 统计单词
    -c 统计字节
    
grep    过滤行,以行为单位过滤
    -i    忽略大小写
    -w    匹配一个词(字母加数字算一个词)
    -n    查看匹配字符所在的行并显示行号
    -o    只显示匹配到的内容一行一个
    -v    去除匹配到的行
    -A [num]    查看匹配成功字段的的·后num行
    -C [num]    查看匹配成功字段的的后num行
    -r [文本参数] [目录]    查找字符串所在的文件
    -l    只列出查找成功的文件名
cut    提取列或者字段
    -d[str]    指定提取列的指定分隔符
    -f [num]    选择要打印哪一列
    -c [num] or [num]-[num]    按照字符来提取
    查看 “/” 分区的使用率
        df -Th | grep -w '/' | cut -d \  -f18 | cut -d % -f 1

    查看ip地址
    ifconfig | grep -w inet | cut -d" " -f10 | head -n 1


基本正则表达式

^[str]    匹配每行的开始
    grep -n "^root" passwd 匹配passwd文件中以root用户开始的行
[str]$    匹配每行的结尾
    grep -n "bash$" passwd 匹配passwd文件中以bash结尾的行
^$    标识空行
    grep -v "^$" profile    去除空行
\<[str]    匹配以str开始的单词,不是行
\>[str]    匹配以str结尾的单词,不是行
str.     任意字符
[str]       代表一个字符 中括号有
    grep -i "^[abc]" passwd 过滤以a、b、c开头的行
[A-Z]    A至Z的大写字母
[a-z]
[0-9]
[A-Za-z]    代表所有字母
[^str]    代表一个字符,但是这个字符不能是str,不匹配这个字符
    grep -i [^abc] 
    grep "^[^abc]"  不匹配以abc开头的行
\    转义字符,把符号转为原本的意思 ,去除其他特殊意思  
    grep "^\["  匹配以中括号开头
*     前一个字符出现0到多次
    grep -i "r*"  匹配r和后面0至多个的r
    grep -v "r[0-9]*" 不匹配r和r后面有0至多个的[0至9]字符
    grep -n "r[a-zA-Z]*" 匹配r和r后面0至多个的任意字母并显示所在行数

扩展正则表达式

需要使用 grep -E 或者 egroup 也都支持基础正则表达式通用
+     代表+前面的1个字符出现1到多次
    grep -E "ro+" passwd 匹配o出现1到多次的
?    代表?前面的一个字符出现0到一次
    grep -E "ro?" passwd 匹配o出现0到1次的
{m}    代表前面的字符出现m次
{m,n}    代表前面的字符出现m到n次
{m,}    代表前面的字符出现m到若干次
{,n}    代表前面的字符出现0到n次
s|t    "|"代表或,也就是说匹配s或者t
    tail -f messages | egrep -i 'err|warn' 查看messages,只更新有err行和warn行的
(str...)    表示一个整体的字符
    grep -E '(ro)*' passwd 表示ro整体出现多次
    
匹配ifconfig内的ip地址
    ifconfig  | grep -E -n  -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
    或者
    ifconfig | egrep -n -o '([0-9]{1,3}\.){3}[0-9]{1,3}'

使用的时候需要在外多添加一个[]
[:alpha:]    匹配字母(不区分大小写)
[:lower:]    匹配大小写字母
[:upper:]    匹配大写字母
[:digit:]    匹配数字
[:space:]    匹配空格
[:alnum:]    匹配容易字母或数字
[:punct:]    除空格和字母、数字意外的任何可打印字符    


\u 当前用户
\h 当前主机名
\W 当前目录

文本分析工具

wc [file]   统计单词数、行数、字节数
    如果直接使用wc [file]    他直接包含了 -l -w -c
    -l    统计行数
    -w    统计单词数
    -c    统计字节数
    
awk 
    '{print $2}' 输出第二列
    -Fn 指定分隔符
    df -Th | grep  -w "/" |awk '{print $6}' | cut -d % -f 1
    
sort [file]   给字符排序,默认是升序
    -r 降序排列
    -n 数字排列
    -f 忽略大小写排列
    -u 删除重复行排列
    -t[str] 指定分隔符
    -k[num] 指定分隔符后按照地num字段排序
    指定分隔符 ":" 按照第3列排序,如果是数字则启用数字排序(如果没有加-n选项默认回事ascii码排序)
        sort -t: -k3 -n passwd
        
uniq [file]   去除相邻重复项
    -c   统计发生的重复次数
    常见用法通常和sort一起用,把passwd文件排序指定每列的分隔符为“:”,使用第3列安装数字排序,并过滤到空行,删除相同的行并显示重复次数
        sort -t: -k3 -n passwd | grep -v  "^$" |uniq -c 
     
tr [str] [str]     文本转换工具,将字符转换成另外一种字符
        -s 去除重复的空额 
        查看passwd文本,过滤掉空行,删除重复行,在将":"转换为 "|"
            cat passwd | grep -v "^$" | uniq -c | tr ':' '|'   
        test 将输入的大写字母转换为小写字母并重定向到test文档
            tr "A-Z" "a-z" >> 
        
sed [file]
    -n 只打印需要的内容,如果不加-n,它会将源文件先全部打印出来,在去打印你需要的
    -r 支持扩展正则表达式
    -i 直接编辑源文件
    -e 可以使用多个命令或者脚本进行操作
    [num]or[num1,num2]p    打印文本
        sed -n 10p passwd     打印 10行文本
        sed -n 10,20p passwd  打印10到20行文本
        sed -n '$ p'    打印最后一行
        sed -n '10, p'  打印10到最后一行
    [num] or [num1],[num2] d     删除匹配到的行,配置 -i使用可以直接删除文本内的数据,不加 -i 只是显示删除 
        sed -i '1,3d' passwd  删除passwd文件中的1,3行
   '[num] or [num1],[num2]a\[str]'    直接在匹配到的行之后追加内容
       sed -i '4 a\aaa' passwd     在passwd文件第4行后添加aaa
   '[num] or [num1],[num2] i\[str]'    直接在匹配到的行之前追加内容
       sed -i '4 i\aaa' passwd     在passwd文件第4行后添加aaa
   '[num] or [num1],[num2] c\[str]'    把匹配到的行给定的文本进行交换
       sed -i '4 c\cccc' passwd
   '[num1],[num2]s/[str1]/[str2]'    把str1换成str2
       /g 表示全局替换
        sed 's/^\(..\)./\1/' [file] 任意两个开始两个字符(因为使用“()”起来了),后面还有一个.也表示任意一个字符,替换为 \1 ("\1"表示前一个“()”内匹配的字符),作用就是删除第三个字符
        将passwd文件中的 bin全部替换为aaa
           sed -n -i  's/bin/aaa/g' passwd
        将passwd显示出1到4行的x替换为X,并显示
            sed -n '1,4  s/x/X/p' passwd
    '[num] or [num1],[num2] w /dir/file' 将匹配到的文件存放在另外一个文件
        sed -i '6,10 w /opt/passwd2' passwd
        
    /[str] or [正则表达式]/        打印匹配正则表达式所在的行
        sed -n -r '/10|11/ p' passwd    打印10行或者11行
        sed -n -r '/[A-Z]/ p' passwd    打印所有有大写字母的行
    [num1]~[num2]    表示冲num1显示后面+num2的行数
    [num1],+[num2]    表示显示num1和后num2行
        cat -n passwd | sed -n '3,+2p'    显示3行和3行的后2行