zoukankan      html  css  js  c++  java
  • 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地址

  • 相关阅读:
    【leetcode】1215.Stepping Numbers
    【leetcode】1214.Two Sum BSTs
    【leetcode】1213.Intersection of Three Sorted Arrays
    【leetcode】1210. Minimum Moves to Reach Target with Rotations
    【leetcode】1209. Remove All Adjacent Duplicates in String II
    【leetcode】1208. Get Equal Substrings Within Budget
    【leetcode】1207. Unique Number of Occurrences
    【leetcode】689. Maximum Sum of 3 Non-Overlapping Subarrays
    【leetcode】LCP 3. Programmable Robot
    【leetcode】LCP 1. Guess Numbers
  • 原文地址:https://www.cnblogs.com/hanxiaobei/p/13234428.html
Copyright © 2011-2022 走看看