linux 文本处理

Posted lizitest

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 文本处理相关的知识,希望对你有一定的参考价值。

    ? cat 查看文件
        ○ 有不可见内容:cat -A file
        ○ 行号:cat -n file 空行加编号
        ○ 行号:cat -b file 空行不加编号
        ○ 压缩相邻的空行:cat -ns file
        ○ 倒着显示:tac file
        
    ? more/less
        ○ 翻页:空格、PgDn/Up
    ? head/tail:
        ○ 默认前10行
        ○ head -n 3 file 前3行
        ○ tail -n 3 file 后3行
        ○ 跟踪日志:tail -f file(f-follow)
    ? cut
        ○ 竖着剪切部分列:
            § cut -d: -f1,3 /etc/passwd(分隔符为冒号,取第一个和第三个字段)
            § cut -d: -f1,3-5 /etc/passwd
            § df -h | cut -c34-36
            § 获取ip地址:
                □ CentOS7:ifconfig | head -n 2 | tail -n -1 | cut -dt -f2 | cut -d" " -f1
                □ CentOS6:ifconfig | head -n 2 | tail -1 | cut -d: -f2 | cut -d" " -f1
                □ ifconfig | head -n 2 | tail -n -1 | tr -s " " | cut -d" " -f2

    ? suid 4:继承程序所有者的权限
    ? sgid  2:继承程序所有组的权限;继承父目录的所属组
    ? sticky  1:只能删除自己的文件

    ? 分区利用率:
        ○ df | tr -s ‘ ‘ ‘%‘| cut -d "%" -f5 压缩空格,用百分号替换空格,再分割

    ? paste 合并两个文件,同行号的列到一行
        ○ paste file1 file2 横向合并
        ○ cat file1 file2 纵向合并
        ○ paste -d ":" file1 file2 加分隔符
        ○ paste -s file1 file2 所有行合并成一行

    ? wc-word count:统计行、单词、字节、文件名
        ○ wc -l file 行
        ○ wc -w file 单词
        ○ wc -c file 字节数
        ○ wc -m file 字符数
        ○ wc -L file 最长行
        ○ 有多少文件:ls | wc -l
        ○ 有多少用户:cat /etc/passwd | wc -l
        
        
    ? httpd:web服务,提供web页面
        ○ 启动:service httpd start
        ○ 地址:ip a
        ○ 端口号:ss -ntl
        ○ 防火墙:iptables -vnL
        ○ 关闭防火墙:service iptables stop
        ○ 禁止防火墙开机启动:chkconfig iptalbes off

    ? 排序
        ○ sort file:按字符排序
        ○ sort -t":" -k3 -n -r /etc/passwd 冒号分割,第三列,数字排序,倒序
        ○ cut -d: -f3 /etc/passwd | sort -nr > uid.txt
        ○ 删除重复的:sort -u file

    ? 生成文件
        ○ echo {1..55}
        ○ echo {1..55} | tr ‘ ‘ ‘ ‘ 每行一个
        ○ echo {1..55} | tr ‘ ‘ ‘ ‘ | sort -R | head -n 1 随机抽奖
        ○ seq 55 | tr ‘ ‘ ‘ ‘ | sort -R | head -n 1

        
    ? 模拟大量用户访问
    ? 模拟:ab -c 100 -n 2000 http://192.168.10.6/index.html
    ? 访问日志:cat /var/log/httpd/access_log 第一行是客户ip
    ? 访问人数(PV):wc -l /var/log/httpd/access_log
    ? 哪个地址访问次数最多(是否是攻击):
        ○ cut -d ‘ ‘ -f 1 access_log | uniq -c 显示出现频次
        ○ 前三名:
            § cut -d ‘ ‘ -f 1 access_log | uniq -c | sort -nr | tr -s ‘‘| cut -d ‘ ‘ -f 3 | head -n 3
            
        
    ? last 用户登录的情况
        ○ 每个账号登录的次数:last | sort | cut -d ‘ ‘ -f 1 | uniq -c
        
        
    ? uniq
        ○ 显示重复的:sort file | uniq -d
        ○ 显示出现频次:sort file | uniq -c
        ○ 找出两个文件相同行:cat file1 file2 | sort | uniq -d
        ○ 找出两个文件不同行:cat file1 file2 | sort | uniq -u


    ? 随机数:
        ○ echo &[RANDOM%55+1]

文本处理三剑客:
    ? grep:文本过滤
    ? sed:文本过滤、修改文件
    ? awk:支持循环、分支,报表打印

    ? grep root /etc/passwd 包含root的行
    ? grep `whoami` /etc/passwd 当前用户名信息
    ? grep $USER /etc/passwd 当前用户名信息
    ? grep -v root /etc/passwd 不包含root的信息
    ? grep -n root /etc/passwd 显示行号
    ? grep -c root /etc/passwd 一共有几行
    ? grep -q root /etc/passwd 静默不输出,配合$?(保存静默结果)使用
    ? /dev/null  垃圾桶,不能删除
    ? grep -An3 root /etc/passwd after
    ? grep -Bn3 root /etc/passwd before
    ? grep -Cn3 root /etc/passwd context前后都要
    ? grep root /etc/passwd | grep wang and关系
    ? grep -e root -e wang /etc/passwd or关系
    ? grep -w root /etc/passwd 包含单词root
    ? nmap 扫描工具
        ○ 扫描所有开机设备:nmap -v -sP 172.16.1010.0/24
        ○ 过滤up的机器:nmap -v -sP 172.16.1010.0/24 | grep -Bl up | grep scan


    ? 正则表达式:
        ○ 基本正则表达式:BRE
        ○ 扩展正则表达式:ERE
        ○ grep 默认支持基本正则表达式,-E支持扩展正则表达式
        ○ 正则表达式引擎:PCRE (Perl Compatible Regular Expressions)
        ○ 匹配:字符匹配、匹配次数、位置锚点、分组
        ○ 字符匹配:
        . 匹配任意单个字符
            § grep r..t /etc/passwd
        [] 匹配指定范围内的任意单个字符
            -  grep [xyz] /etc/passwd - 包含x或y或z
            - grep [x-z] /etc/passwd - 包含x到z任意字符(区分大小写)
        [^] 匹配指定范围外的任意单个字符 -
        
        [:alnum:] 字母和数字
        [:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
        [:lower:] 小写字母 [:upper:] 大写字母
        [:blank:] 空白字符(空格和制表符)
        [:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
        [:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
        [:digit:] 十进制数字 [:xdigit:]十六进制数字
        [:graph:] 可打印的非空白字符
        [:print:] 可打印字符
        [:punct:] 标点符号
        
        * 匹配前面的字符任意次,包括0次
            - 星号前面的字符出现任意次数
            - grep go*gle testfile 字母o出现几次
        贪婪模式:尽可能长的匹配
        .* 任意长度的任意字符
            -
        ? 匹配其前面的字符0或1次
            - grep go?gle testfile 字母o出现一次或0次
        + 匹配其前面的字符至少1次
        
        {n} 匹配前面的字符n次
        {m,n} 匹配前面的字符至少m次,至多n次
            - grep go{2,7}gle testfile 字母o出现2-7次
        {,n} 匹配前面的字符至多n次
        {n,} 匹配前面的字符至少n次
        
        ○ 获取ip地址:ifconfig | grep --color -wo "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"
        ○ 获取ip地址:ifconfig | grep --color -wo "([0-9]{1,3}.){3}[0-9]{1,3}"
        ○ 获取 2018-01-12 03:48:46:(tr 替换命令)
            - ffmpeg -i "D:Videos20180112_114837.mp4" 2>&1 | grep -wo "[0-9]{4}[-][0-9]{2}[-][0-9]{2}[T][0-9]{2}[:][0-9]{2}[:][0-9]{2}" |tr  "T" " " | uniq
        ○ 获取 00:00:08:
            - ffmpeg -i "D:Videos20180112_114837.mp4" 2>&1 | grep Duration | grep -wo "[0-9]{2}[:][0-9]{2}[:][0-9]{2}"
        ○ 获取2018-01-12
            - ffmpeg -i "D:Videos20180112_114837.mp4" 2>&1 | grep -wo "[0-9]{4}[-][0-9]{2}[-][0-9]{2}" | uniq
    
    ? 以root开头的行:grep "^root" /etc/passwd
    ? 以nologin结尾的行:grep "nologin$" /etc/passwd
    ? 空行:grep "^$" file
    ? 不显示空行:grep -v "^$" file
    ? 不显示注释行:grep -v "^#" /etc/fstab | grep -v "^$"
    ? 显示包含指定单词的行:grep "<root>" /ect/passwd
    ? 一个或多个空格开头:grep "^[[:space:]]+linux16" /boot/grub2/grub.cfg | grep -v rescue

    ? 分组:root这个单词出现两次以上:echo rootrootroot | grep "(root){2,}"
    ? 分组后的调用:root用户开头并且后续再出现root
                □ grep "^(root).*1.*" /etc/passwd
                □ grep "(r..t).*1" file (搜索替代,非常有用)
    ? 获取分区利用率:(大于80%利用率就开始报警)
        ○ df -h | grep "^[/dev/sda]" | grep -o "[0,9]{1,3}%$" | grep -o "[0,9]{1,3}"
        ○ df -h | grep "^/dev/sda" | grep -o "[[:digit:]]+%" | grep -o "[[:digit:]]+"


    ? a或者b开头:echo aXX bXX | grep -o "(a|b)XX"

    ? 以上是基本正则表达式,比较麻烦,总加 ;扩展正则表达式去掉

    ? 扩展正则:

        ○ 获取ip地址:ifconfig | grep -Ewo "([0-9][1,3].){3}[0-9]{1,3}"
        ○ 获取系统镜像中的文件对系统的要求:
            - ls *.rpm | grep -Eo ".(.*).rpm" | cut -d "." -f 2 | uqic -c
            - ls *.rpm | grep -Eo ".<[[:alnum:]_]+>.rpm$" | cut -d "." -f 2 | sort | uqic -c
            - ls *.rpm | grep -Eo ".[^.]+.rpm$" | cut -d "." -f 2 | sort | uqic -c


 





































































































































































































以上是关于linux 文本处理的主要内容,如果未能解决你的问题,请参考以下文章

linux文本处理工具

Linux文本处理工具三剑客之grep

Linux文本处理之sed

Linux下常用文本处理命令

Linux文本处理三剑客之grep

linux文本处理三剑客之grep