• 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


  • 相关阅读:
    Lua调用C++时打印堆栈信息
    Node.js批量去除BOM文件
    cocos2d-x中CCLabelAtlas的小图片拼接
    node.js使用mysql模块的坑
    关于chrome插件编写的小结
    【吐槽】如风达快递
    bat调用TexturePacker更新SpriteSheet
    使用node-webkit实现打包工具的小结
    使用devenv.exe自动编译项目
    svn导出文件进行比较
  • 原文地址:https://www.cnblogs.com/lizitest/p/9552883.html
Copyright © 2020-2023  润新知