shell基础(三)

目录

一,正则表达式

1,基础正则

2,扩展正则

3,常见正则表达式

二,文件操作四剑客

1,grep进阶

2.egrep

3,find进阶

4,sed

5,awk


一,正则表达式

1,基础正则


    a)查找特定字符        cat test.txt | grep -n 'was'
    b)利用[]查找集合字符        cat test.txt | grep -n 'sh[io]rt'          匹配i或者o
        cat test.txt | grep -n '[^w]'           排除w
        cat test.txt | grep -n '[a-h]oo'
        cat test.txt | grep -n '[0-9]'
    c)查找行首"^"与行尾"$" 
        cat test.txt | grep -n '^[A-Z]'
        cat test.txt | grep '\.$'            \ 为转义符
    d)查找任意一个字符"."与重复字符"*"
        cat test.txt | grep -n 'w..d'
        cat test.txt | grep -n 'ooo*'
    e)查找连续的字符范围"{}",需要使用转义符,"\{\}"
        cat test.txt | grep -n 'o\{2\}'
        cat test.txt | grep -n 'wo\{2,5\}d'
        cat test.txt | grep -n 'wo\{2,\}d'

2,扩展正则

a)+,重复一个或一个以上的前一个字符
    cat test.txt | grep -nE 'wo+d' 或者
    cat test.txt | egrep -n 'wo+d'
b)?,零个或者一个前一个字符
    cat test.txt | egrep -n 'bes?t'
c)|,使用或者的方式找出多个字符
    cat test.txt | egrep -n 'of|is|on'
d)(),查找组字符串
    cat test.txt | egrep -n 't(a|e)st'
e)()+,辨别多个重复的组
    cat test.txt | egrep -n 'A(xyz)+C'

3,常见正则表达式

3.1数字
    “^[0-9]*[1-9][0-9]*$” //正整数  
    “^((-\d+)|(0+))$” //非正整数(负整数 + 0)  
    “^-[0-9]*[1-9][0-9]*$” //负整数  
    “^-?\d+$” //整数 
    “^\d+(\.\d+)?$” //非负浮点数(正浮点数 + 0)  
    “^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$” //正浮点数 
    “^((-\d+(\.\d+)?)|(0+(\.0+)?))$” //非正浮点数(负浮点数 + 0) 
    “^(-?\d+)(\.\d+)?$” //浮点数 

3.2字符串
    “^[A-Z]+$” //由26个英文字母的大写组成的字符串  
    “^[a-z]+$” //由26个英文字母的小写组成的字符串  
    “^[A-Za-z0-9]+$” //由数字和26个英文字母组成的字符串  
    “^\w+$” //由数字、26个英文字母或者下划线组成的字符串

3.3Email
    “^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$” //email地址  
    “^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$”   //Email 

3.4Url 
    “^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$” //url 

3.5IP
    “^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$”   //IP地址

3.6Tel 
    /^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/     //电话号码

3.7日期校验

   /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/   //  年-月-日    yyyy-MM-dd / yy-MM-dd 格式
   "^[0-9]{4}-((0([1-9]{1}))|(1[1|2]))-(([0-2]([0-9]{1}))|(3[0|1]))$"   // 年-月- 日  yyyy-MM-dd 格式
  /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/   // 月/日/年

二,文件操作四剑客

1,grep进阶


    选项 

      -r            递归扫描指定目录下的每一个文件
        -l            只显示匹配到指定关键字的文件名,而不是文件内容
    案例
        查看/etc目录下所有包含bash的文件名
        grep -rl bash /etc

2.egrep


    完美支持正则表达式

3,find进阶


    3.1按照权限查找        -perm
    3.2按照时间戳查找
        -atime
        -mtime
        -ctime
  3.4  -exec
        find /var/spool/mail -type f -exec rm -rf {} \;
   3.5 xargs
        find /var/spool/mail -type f | xargs rm -rf

4,sed

4.1语法
    sed [选项] '操作' 参数 
    sed [选项] -f scriptfile 参数

4.2选项
    -e:表示用指定命令或脚本处理
    -f:指定脚本文件
    -h:帮助
    -n:表示仅显示处理后的结果
    -i:直接编辑文本文件
    -r:支持扩展正则

 4.3操作

a:增加,在当前行下面以行增加指定内容
c:替换,将选定行替换
d:删除,删除指定行
i:插入,在选定行的上面插入一行
p:打印
s:替换,替换指定字符
y:字符转换

5,awk

5.1语法
    awk 选项 '模式或条件{编辑命令}' 文件1 文件2 ...
    awk -f 脚本文件 文件1 文件2 ...

5.2选项

-F    指定每行的分隔符
默认分隔符为空格

5.3内建变量

FS:指定每行的分隔符
NF:指定当前处理行的字段个数
NR:当前处理行的行号
$0:当前处理行的整行内容
$n:当前处理的第n个字段
FILENAME:处理文件名
RS:数据记录分隔,默认是\n

5.4案例

a)按行输出
    awk '{print}' test.txt          #等同cat 
    awk 'NR>=1&&NR<=3{print}' test.txt 
    awk 'NR==1,NR==3{print}' test.txt #打印1到3行
    awk 'NR%2==0{print}' test.txt     #打印偶数行
b)按段输出
    默认以"空格"分段!
    ifconfig ens33 |awk '/netmask/{print $2}' #筛选IP地址
    cat /etc/shadow | awk -F : '$2=="!!"{print $1}' #打印不能登录系统的用户
c)调用shell命令
    cat /etc/passwd | awk -F : '/bash$/{print | "wc -l"}' /etc/passwd     #统计能够登录系统的用户个数    

你可能感兴趣的:(服务器,运维)