• shell脚本 字串截取 正则表达式


    字串处理

    子串截取
    方法一:使用${}表达式
    格式:echo ${x:起始位置:长度}(起始位置编号从0开始,可省略)

    方法二:使用expr substr
    格式:expr substr "$x" 起始位置 长度(起始位置编号从1开始)

    方法三:使用cut工具
    格式:ceho $x|cut -b 起始位置-结束位置(起始位置编号从1开始)
    -b:字节过滤
    -c:过滤字符
    -f:过滤列

    示例:截取QQ1520029989
    [root@ceshiji ~]# x=1520029989
    [root@ceshiji ~]# echo $x
    1520029989

    方法一:[root@ceshiji ~]# echo ${x:0:5}
    QQ152

    方法二:[root@ceshiji ~]# expr substr "$x" 1 7
    QQ15200

    方法三:[root@ceshiji ~]# echo $x|cut -b 1-8
    QQ152002


    路劲分割:
    取目录位置
    格式:dirname "字符串"(截取文件名)
    [root@ceshiji ~]# dirname /a/c/b/c.txt
    /a/c/b

    取文档的基本名称
    格式:basename "字符串"(截取路劲)
    [root@ceshiji ~]# basename /a/c/b/c.txt
    c.txt


    字串替换的方法:
    只替换第一个匹配结果
    格式:echo ${/var/old/new}
    [root@ceshiji ~]# a=123456
    [root@ceshiji ~]# echo ${a/3/x}
    12x456

    替换全部匹配结果
    格式:echo ${var//old/new}
    [root@ceshiji ~]# a=12345353
    [root@ceshiji ~]# echo ${a//3/x}
    12x45x5x
    [root@ceshiji ~]# echo ${a//53/xz}
    1234xzxz

    ——————————————————————————————————————————

    字符串的掐头去尾

    字符串掐头(#用来删除头部,*通配)
    从左向右,最短匹配删除
    格式:echo ${变量名#*关键词}
    [root@ceshiji ~]# x=`head -1 /etc/passwd`(x变量=head -1 /etc/passwd命令,)
    [root@ceshiji ~]# echo ${x#*:}
    x:0:0:root:/root:/bin/bash

    从右向左,最长匹配删除
    格式:echo ${变量名##*关键词}
    [root@ceshiji ~]# echo ${x##*:}
    /bin/bash

    字符串去尾(%用来删除头部,*通配)
    从左向右,最短匹配删除
    格式:echo ${变量名%关键词*}


    从右向左,最长匹配删除
    格式:echo ${变量名%%关键词*}


    批量改扩展文件名
    [root@ceshiji ~]# vim a.sh
    #!/bin/bash
    for i in `ls *.$1`
    do
    mv $i ${i%.*}.$2
    done

    变量赋初始值
    若变量xx已经存在且非null,则返回$xx的值
    否则返回字符hydra,变量xx值不变
    取值:${xx:-hydra}
    [root@ceshiji ~]# echo ${b:-ok}
    ok
    [root@ceshiji ~]# b=1520029989
    [root@ceshiji ~]# echo ${b:-ok}
    1520029989

    [root@ceshiji ~]# vim a.sh
    #!/bin/bash
    read -p "admin:" user
    read -p "pass:" pass
    user=${user:-tom}
    pass=${pass:-123}
    useradd $user
    echo "pass" |passwd --stdin $user

    ———————————————————————————————————

    expect简介
    基于TCL编写的自动交互式程序
    可以用在shell脚本中,为交互式过程自动传输预先准备的文本或指令
    无需人工干预,触发的依据是预期会出现的特征提示文本
    但是expect不支持变量,但可以将expect内置到shell脚本中

    实例:
    将expect内置到shell脚本中实现ssh自动登陆,并远程执行指令
    spawn:启动程序
    expect:屏幕出现什么识别什么
    send自动执行
    [root@ceshiji ~]# vim expect.sh
    #!/bin/bash
    for i in 1..253
    do
    expect <<EOF
    spawn ssh 192.168.4.$i
    expect{
    "yes/no" {send "yes ";exp_continue}
    "password" {send "Taren1"}
    # {send "mkdir /hydra "}
    # {send "exit "}
    }
    EOF
    done

    ————————————————————————————————————————

    正则表达式
    数组:变量 [存多个值]
    a=(11 22 33 xx yy)
    echo ${a=[0]}(调用变量)

    grep过滤命令
    基本用法:
    格式一:grep [选项] '正则表达式' 文件
    格式二:前置命令 |grep [选项] '正则表达式'
    常用命令选项:
    -i:忽略字母大小写
    -v:条件取反
    -c:统计匹配次数
    -q:静默,无任何输出(看$?返回值,为0则匹配)
    -n:显示出匹配结果所在的行号
    --color:标红显示匹配字串

    基本正则
    行首及单字匹配
    类型 含义 示例 说明
    ^ 匹配行首 ^abc 匹配以abc开始的行
    $ 匹配行尾 abc$ 匹配以abc结尾的行
    . 单个字符 . 匹配任意字符,( 换行符除外)
    + 最多匹配一次 a+或者(abc)+ 一个或多个连续的a
    * 匹配任意次数 .* 任意长度的任意字符
    {} 限定匹配次数 {n},{ ,m},{n,} 匹配n次,匹配n-m次,至少匹配n次
    [] 集合内的任何字符 [a-z] 匹配任意小写字母
    [^..] 中阔号内加^ [^123] 过滤123
    (xx) 保留 (abc)x2 保留abc

    实例:
    在a.txt文件中
    匹配a出现的次数
    [root@ceshiji ~]# grep "a*" a.txt
    aaaa
    bbasads
    caascaiof
    assacafca
    asocnoaf

    过滤有oo的字节
    [root@ceshiji ~]# grep "oo" a.txt

    过滤不想要oo前面有g的
    [root@ceshiji ~]# grep "[^g]oo" a.txt

    过滤oo前面不想有小写字母
    [root@ceshiji ~]# grep "[^a-z]oo" a.txt

    过滤有数字的一行
    [root@ceshiji ~]# grep "[^0-9]" a.txt

    过滤两个o以上的字节
    [root@ceshiji ~]# grep "o{2,}" a.txt

    扩展正则(增强,优化)
    egrep
    类型 含义 示例 说明
    () 组合为整体 ab{1,3} 匹配ab
    ? 最多匹配一次 a?或者(abc)? 0个或a,0个或1个abc
    + 最少匹配一次 a+或者(abc)+ 一个或多个连续的a,一个或多个连续的abc
    ——————————————————————————————————————————————————————

  • 相关阅读:
    HashMap 和HashTable
    两种方式获得键盘录入
    打印流 printStream
    对象操作流--存储对象
    内存输出流
    序列流
    装饰设计模式
    递归
    IO流(使用指定的码表读写字符)
    IO-字符流 练习
  • 原文地址:https://www.cnblogs.com/Hydraxx/p/7262224.html
Copyright © 2020-2023  润新知