• 正则



    正则:
    正则就是一串有规律的字符串

    grep:
    grep [-cinvABC] 'word' filename
    -c 行数
    -i 不区分大小写
    - n 显示行号
    -v 取反
    -r 遍历文件下所有子目录
    -A 后面跟数字(-A2),过滤出符合要求的行以及下面n行
    -B 后面跟数字,过滤出符合要求的行以及上面n行
    -C后面跟数字,过滤出符合要求的行以及上下各n行

    grep/egrep实例:
    grep -n 'root' /etc/passwd 查看文档并显示行号
    grep -nv 'nologin' /etc/passwd 显示行号并不显示带有‘nologin’的行
    grep '[0-9]' /etc/inittab 显示所有带数字的行
    grep -v '[0-9]'/etc/inittab 显示所有不带数字的行
    grep -v '^#' /etc/sos.conf 显示以 # 号 开头的行
    grep -v '^#' /etc/sosconf |grep -v '^$' 显示不以#和$开头的行
    [^a-zA-Z]/[^0-9] 里面字符的反义
    grep '^[^a-zA-Z]'test.txt 显示以非a-z的字符开头的的行
    grep '[^0-9]' inittab 显示非数字(非0-9的数字)
    grep ‘^[^0-9]' inittab 显示以非数字开头的行
    grep 'r.o'test.txt .表示任意一个字符
    grep 'o*o'test.txt *表示任意次数*左边的字符
    grep 'o{2}' /etc/passwd 在正则中{}表示范围,需要托意 。 显示以两个o组成的字符
    egrep = grep -E
    gerp 'o{2}' /etc/passwd 显示以两个o组成的字符串
    egrep 'o+t' /etc/passwd 显示大于一次的o的字符组成,没有的话找t
    egrep 'oo?t' /etc/passwd ?表示前面字符的次数为0或1,没有的话找t
    egrep 'root|nologin' /etc/passwd |表示或者,匹配有root或nologin
    egrep '(00){2}' /etc/passwd

    set :
    sed -n '/root/'p test.txt
    sed -n '/r.t/'p test.txt
    sed -n '2'p test.txt 打印第2行
    sed -n '2,5'p test.txt 打印2到5行
    $表示末行
    sed -e '1'p -e '/bus/'p -n test.txt -e可以匹配多个,并分别打印
    sed -n '/bus/'Ip test.txt 匹配bus不区分大小写,加I(大写i)
    sed '1,10'd test.txt 删除1到10行
    sed -i '1,25'd test.txt 删除1到25行
    sed '1,10s/root/toor/g' test.txt 查找替换,可使用正则表达式
    head test.txt |sed -r's//([^:]+).*)[^:]+)/3:2:1/' 每行分3段,1和3段调换顺序
    head testtxt |sed 's//root/123/g' 在这里时需要托意的,不然会报错,正确写法: head testtxt |sed 's//root/123/g'
    head test.txt |sed -r 's/(.*)/aaa:&/' 用&代替匹配出来的字符串,在每行行首前加 aaa:

    awk工具:

    针对字符或数字:

    在不指定分隔符的时候,默认以空格和空白字符为分隔符
    head -n2 test.txt|awk -F ':'{print $1}' 指定:为分割线符,打印第一段
    head -n2 test.txt|awk -F ':'{print $0}' $0表示所有
    awk -F ':'‘{print $1"#"$2"#"$3"#"$4}'分割出来用#隔开
    awk -F ':'‘{print $1,$2,$3,$4}'分割打印1-4行
    awk '/oo/' test.txt 打印包含oo的行
    awk -F ':' '$1 ~/oo/' test.txt 匹配包含oo的字符串,以:分段,打印第一段
    awk -F ':' '/root/ {print $1,$3} /test/{print$1,$3}'test.txt
    以:分段。匹配包含root的字符串,打印1和3段,匹配包含test的,打印1和3段
    awk -F ':''$3=="0"' /etc/passwd 打印第三段等于零的
    awk -F ':''$3>="500"' /etc/passwd 打印第三段大于等于500的
    awk -F ':''$3>=500' /etc/passwd 不加双引号针对数字,加了双引号针对阿斯码的
    awk -F ':''$7!="/sbin/nologin"' /etc/passwd 第七段不等于这个的
    ,字符串要加双引号

    针对字段进行比较:
    awk- F 用来只限定分割时的分隔符; OFS用来指定打印时用的分隔符
    NR表示行,NF表示段 (数字形式)
    &&并且 , ||或许 , == 匹配 , = 赋值 , tot 求和
    awk -F ':' '$3<$4' /etc/passwd 第三段小于第四段的
    awk -F ':' '$3>"5" && $3<"7"' /etc/passwd 第三段大于数字5并小于数字7的
    awk -F ':' '$3>1000' ||$3<"7" /etc/passwd 大于1000或者小于7

    head -5 /etc/passwd |awk -F ':'{OFS="#"}{print$1,$2,$3,$4}'
    awk -F ':'{OFS="#"}{if($3>1000){print$1,$2,$3,$4}}' /etc/passwd

    head -n3 /etc/passwd | awk -F ';'{print NF}
    head -n3 /etc/passwd | awk -F ':'{print NR}
    awk 'NR>40' /etc/passwd
    awk -f ';'NR<20 && $1 ~ /root|sync/'/etc/passwd 行号小于20并且第一段包含root或sync的字符
    head -n 3 /etc/passwd |awk -F ':'$1="root"'
    awk -F ';''{(tot=tot+$3)};END{print tot}' /etc/passwd
    tot每次循环都会把第三段的值相加
    awk -F ':''{if($1=="root")}{print $0}}' /etc/passwd

  • 相关阅读:
    Mysql主从同步延迟问题及解决方案
    elasticsearch 查询过程
    RPC(Remote Procedure Call):远程过程调用
    windows
    设计模式
    Linux Safe
    AS
    开机启动
    springboot打包部署
    【Linux】Linux 常用命令汇总
  • 原文地址:https://www.cnblogs.com/herosyuan/p/9791982.html
Copyright © 2020-2023  润新知