• Linux命令之三剑客awk、sed、grep


    Linux命令三剑客

    awk:文本处理工具

    sed:行编辑器

    grep:查找

    awk和sed正则匹配都是一样的用法,都是使用 “/正则匹配表达式/”

    AWK

    1、以冒号分割打印passwd文件中的第三列:awk -F ':' '{print $3}' /etc/passwd

    2、以冒号分割打印passwd文件中的第一和三列:awk -F ':' '{print $1,$3}' /etc/passwd

    注释:可采用printf函数格式化输出,也可用print拼接字符串输出

    3、以冒号分割打印每行的列数及文件名:awk -F ':' '{print NR,NF,FILENAME}' /etc/passwd

    4、以冒号分割打印UID大于100的用户,UID以及行号: awk -F ':' '{if ($3>100) print NR,$1,$3}' /etc/passwd

    以冒号分割打印UID大于100的用户,UID以及行号:awk -F ':' '$3>100{print NR,$1,$3}' /etc/passwd

    5、在服务器的访问日志中找到IP:192.168.1.1的访问

    6、打印以s开头的UID内容:awk -F ":" "$1 /^s/" /etc/passwd

    实战

    7、统计当前文件夹下文件的总大小并转换成单位兆:ls -lah |awk 'BEGIN{count=0}{count+=$5}END{print count/1024/1024"M"}'

    8、统计文件的总行数:awk 'BEGIN{count=0}{count++}END{print count}' localhost_access_log.2019-12-03.txt

    9、统计/etc/passwd中UID大于100的用户总数:awk -F ':' '$3>100 {print $1}' /etc/passwd |wc -l

      一、先过滤出UID大于100的用户:awk -F ':' '$3>100 {print $1}' 

      二、统计一下总数:wc -l

    10、在日志文件中统计下访问IP及出现次数:awk '{arr[$1]++}END{for (i in arr)print i,arr[i]}' localhost_access_log.2019-12-03.txt

    sed

    1、打印第10行数据:nl passwd |sed -n 10p

    打印1到3行数据:nl passwd |sed -n 1,3p

    2、正则匹配打印含有root的行:nl passwd | sed -n /root/p

    利用正则把IP192.168网段的访问内容打印出来

    3、不要打印行数

    4、输出到屏幕时不打印第2行: nl passwd|sed "2d"

      输入到屏幕时不打印1到15行:nl passwd|sed "1,15d"

    输出到屏幕时在第2行后追加bbb:nl passwd|sed "2abbbbbbb"

      在1到5行后都追加bbb: nl passwd|sed "1,5abbbbbbbbbbbbbbbb"

    输出到屏幕时在第2行前插入ccc: nl passwd|sed "2icccccccc"

      在1到5行前都插入ccc:nl passwd|sed "1,5icccccccc"

    输出到屏幕时把第5行替换成---:nl passwd|sed "5c------"

      把1到15行全部替换成---:nl passwd|sed "1,15c------"

     5、sed更改文件内容的两种方式

      一、重定向

      在a.txt文件内容末尾追加:sed -n '$a yyyyyyyyyyyyyy' a.txt >>  a.txt 

      二、-i参数

      在a.txt文件内容的末尾追加:sed -i '$a wwwwwwwwwwwwwwwwwwww'  a.txt  

     6、sed替换用法

    7、删除10到20行,并把所有的冒号替换成百分号:nl passwd |sed '{10,20d;s/:/%/g}'

    8、步长打印: nl passwd |sed -n '{3~3p}'

    9、用户名后边加一个空格

    用户名改为首位字母大写

    10、将后缀为txt的文件名转换为大写字母:ls *.txt |sed 's/[a-z_-]+/U&/'

    11、提取etc目录下passwd的用户名,UID和GID:sed 's/     (^[a-z_-]+)    :x:   ([0-9]+)    :   ([0-9]+)   :.*$     /1,2,3/'       passwd

    12、sed   -e参数可以执行多个:nl passwd |sed -e '10,15d' -e 's/:/%/g'

    面试题:

    重命名当前目录下所有a.txt文件名为A.txt

    1、find . -name "a.txt" -exec rename a.txt A.txt {} ;

    2、find . -name "*a.txt*" |xargs rename a.txt A.txt

    修改文件内容中所有wahaha为hanxiaobei

    1、查找当前目录下所有文件内容中带有wahaha的文件

    2、修改wahaha为hanxiaobei:sed -i 's/wahaha/hanxiaobei/' `grep wahaha -rl .`

    提取IP地址

  • 相关阅读:
    windows service and process 的关系
    12C expdp issue
    12C dbca silent
    12c 补丁架构 以及opatch 功能
    12C CLONE PDB and config service_listener
    给windows共享 目录付于权限
    zendstudio 安装 手册
    WampServer 下载以及安装问题 以及配置远程连接MYSQL
    Scrapy运行流程
    PyCharm设置Python版本
  • 原文地址:https://www.cnblogs.com/hanxiaobei/p/13234428.html
Copyright © 2020-2023  润新知