• shell


    字符串操作

    取值

    ${value:offset}  ${value:offset:length}从变量中提取字串

    ${#value}字符串长度

    ${#array[*]},${#array[@]}数组中元素的个数

    掐头去尾与内容替换

    ${value#pattern}  ${value##pattern} #掐头,掐掉*前的,*在pattern前

    ${value%pattern}  ${value%%pattern} %去尾,去掉*后的,*在pattern后

    ${value/pattern/string}  ${value//pattern/string} /替换

    #与##,%与%%,/与//区别:最短匹配模式VS最长匹配模式

    echo $c|sed 's#c#4#g'  g全局匹配,+g :匹配每一行有行首到行尾的所有字符;不加g:匹配每一行的行首开始匹配,匹配到第一个符合的字段,就会结束,跳到下一行

    打印序列seq

    seq 10=>1,2,3,4,5,6,7,8,9,10

    seq 10 20=>10,11,12,13,…20

    seq 10 3 20=>10,13,16,19

    [root@hadoop101 ~]# c="hello testerhome w456"
    [root@hadoop101 ~]# echo ${#c}
    21
    [root@hadoop101 ~]# echo ${c:2:3}
    llo
    [root@hadoop101 ~]# echo ${c/o/0}
    hell0 testerhome w456
    [root@hadoop101 ~]# echo ${c//o/0}
    hell0 testerh0me w456
    [root@hadoop101 ~]# echo ${c#*t}
    esterhome w456
    [root@hadoop101 ~]# echo ${c%e*}
    hello testerhom
    [root@hadoop101 ~]# echo ${c%%e*}
    h
    [root@hadoop101 ~]# echo ${c##*t}
    erhome w456
    [root@hadoop101 ~]# echo $c|awk '{print substr($0,2,3)}'
    ell
    [root@hadoop101 ~]# echo $c|sed 's#4#c#g'
    hello testerhome wc56
    [root@hadoop101 ~]# echo $c|sed 's#e#c#'
    hcllo testerhome w456
    [root@hadoop101 ~]# echo $c|sed 's#e#c#g'
    hcllo tcstcrhomc w456

    判断

    算术判断

    [ 2 -eq 2 ],括号两边必须有空格,(())也可表示算术运算((10>=8))

    -eq 等于  -ne不等于

    -gt 大于  -ge大于等于

    -lt 小于  -le小于等于

    字符串比较

    [ str1=str2 ] 相等为真,注意不是==

    [ str1!=str2 ] 不等为真

    [ -n "$var" ] 如果字符串不为空,结果为真

    [-z "$var" ] 如果字符串为空,结果为真

    [[ "xxx"===x* ]] 在表达式中表示0或者多个字符

    [[ xxx==x?? ]] 在表达式中表示单个字符

    逻辑运算

    [ 2 -ge 1 -a 3 -ge 4 ]  , [[ 2 -ge 1 && 3 -ge 4 ]] 与

    [ 2 -ge 1 -o 3 -ge 4 ]  , [[ 2 -ge 1 || 3 -ge 4 ]] 或

    [ !2 -ge 1  ]非

    逻辑控制

    if

    if[ condition ];then ...;fi

    if[ condition ];then ...;else ...;fi

    if[ condition ];then ...;elif ...;fi

    for

    for [condition];do ...;done

      for((i=0;i<10;i++));do echo $i;done

      for i in $array[*];do echo $i;done

    while

    i=0;while [ $i -lt 3 ];do echo $i;((i=i+1));done

    一行行的读取文件

    while read line;do echo $line;done </tmp/tmp

    函数

    ff(){ for d in $@ "$@" $* "$*";do echo $d;done; };

    函数调用,传参

    ff 1 2 '3 "4 5" 6'7 "8 9"

    grep,awk,sed

    grep数据查找定位

    awk数据切片

    sed数据修改

    grep

    grep pattern file
    
    grep -i pattern file 忽略大小写
    
    grep -v pattern file不显示匹配的行
    
    grep -o pattern file 把每个匹配的内容用独立的行显示
    
    grep -E pattern file使用扩展正则表达式
    
    grep -A -B -C pattern file打印命中数据的上下文
    
    grep pattern -r dir/ 递归搜索
    
    ##pattern正则表达式

    awk

    awk 'pattern{action}'
    
    awk 'BEGIN{}END{}' 开始和结束
    
    awk '/Running/'  正则匹配
    awk '/aa/,/bb/' 区间匹配
    
    awk '$2~/xxx/'  字段匹配($2,表示匹配第二个字段)
    
    awk 'NR==2' 取第二行
    
    awk 'NR>1' 去掉第一行
    
    awk内置变量
    
    FS字段分隔符
    
    OFS输出数据的字段分隔符
    
    RS记录fengef
    
    ORS输出数据的记录分隔符
    NF字段数
    
    NR行数
    
    awk字段数据处理
    
    -F 指定字段分隔符
    
    BEGIN{FS="_"}  指定"_"为分隔符
    $0表示原来的行,$1~$N代表第几个字段,$NF最后一个字段

    sed

    sed[addr]X[options]
    
    -e 表达式
    
    sed -n '2p' 打印第二行,n表示行,p表示print,通常一起使用
    
    sed 's#hello#world#' 修改,将hello改为world
    
    -i 直接修改源文件
    #通常用sed -i '.bak' 备份修改
    -E 扩展表达式 --debug调试 20 20,35行数与行数范围 /pattern/ 正则匹配 //,//正则匹配的区区间 d删除 s/REGEXP/REPLACEMENT/[FLAGS] 12 匹配的字段
  • 相关阅读:
    岳麓山岳麓书院
    花洲书院
    《诫子书》诸葛亮
    AI ML DL
    台湾大学林轩田机器学习基石
    LeNet
    VGGNet
    AlexNet 2012
    AS 中 Plugin for Gradle 和 Gradle 之间的版本对应关系
    AndroidStudio、gradle、buildToolsVersion关系
  • 原文地址:https://www.cnblogs.com/jaigejiayou/p/13385767.html
Copyright © 2020-2023  润新知