• Redhat(3)-Bash-Shell-正则表达式


    1.bash脚本
    2.bash变量、别名、算术扩展
    3.控制语句
    4.正则表达式


    1.bash脚本  

    1. #!/bin/bash
    2. #this is basic bash script
    3. << BLOCK
    4. This is the basic bash script
    5. BLOKC
    6. :'
    7. This is the basic bash script
    8. '
    9. echo "hello world!"

     双引号、单引号只有在变量时才有区别
     双引号: 变量值
      单引号:字符

    1. #!/bin/bash
    2. comment="hello world"
    3. echo"$comment"
    4. echo'$comment'
    5. 输出:hello world
    6. $comment
    1. #1.touch创建脚本
    2. touch file_name
    3. #2.vim 编写内容
    4. #!/bin/bash
    5. echo -n "hostname is :";hostname
    6. #3.执行程序
    7. chmod +x ./file_name.sh
    8. ./file_name.sh
    9. /bin/sh file_name.sh

    2.shell变量、别名、算术扩展
    #!/bin/bash
     

    1. declare -u first_name="Ji"; #定义大写的变量
    2. echo $first_name #单独输出:JI
    3. declare -l last_name="Ma"; #定义小写的变量
    4. echo &last_name #ma
    5. echo $first_name_&last_name #ma
    6. echo &{first_name}_&{last_name} #字符拼接:JI_ma
    7. echo file-{1..3} #file-1 file-2 file-3
    8. echo &[ &num+5 ]
    1. # 更改EDITOR
    2. EDITOR=vim;export EDITOR
    3. export EDITOR=vim
    4. #更改LANG
    5. export LANG=zh_CN.UTF-8
    6. #更改PATH
    7. export PATH=&{PATH}:/home/student/sbin


    3.控制语句
     
    3.1for语句
     

    1. #1.基本语法 两个小括号
    2. for((i=n;i<=m;i++))
    3. do
    4. command1;
    5. done
    6. sum=0;
    7. for((i=n;i<=m;i++))
    8. do
    9. let sum=$[sum+i];
    10. done
    11. for num in{1..10};
    12. do
    13. echo $num;
    14. done
    15. #2.$*和$@区别
    16. #!/bin/bash
    17. for args in $*
    18. do
    19. echo $args
    20. done
    21. for args in "$@"
    22. do
    23. echo $args
    24. done


      
    4.正则表达式
        
    正则表达式提供一种便于查找特定内容的模式匹配机制。  

    1. cp /etc/fstab .
    2. vim fstab
    3. 影响多少行:% ,s替换,开头:/^ 以UUID开头;中间:.* 任意;结尾:defaults/;/:替换成
    4. :%s/^UUID.*defaults//
    5. :1,3 #只控制1-3行
    1. #1 查找test文件中的字符串 cat
    2. #2.需要加单引号,特殊字符
    3. cat test|grep 'cat'

    匹配规则:


     

     4.1扩展
       grep -E 'a|b'

    1. #在test里找 a 或者 b
    2. cat test|grep -E 'a|b'
    3. cat test| egrep 'ab|bc'

    4.2非打印字符

     4.3 限定次数,指定正则表达式出现次数

     比如:在文件test中查找 abc 出现2次的字符:
    cat test| egrep '(abc){2}'
    在文件test中查找 abc 出现2次以上的字符:
    cat test| egrep '(abc){2,}'
    在文件test中查找 abc 出现2次以下的字符:
    cat test| egrep '(abc){,2}'
    在文件test中查找 abc 出现1-3次的字符:
    cat test| egrep '(abc){1,3}'


    在文件test中查找 a 出现1次以上:
    cat test| egrep 'a+' 
    在文件test中查找 a 出现任意次数:
    cat test| egrep 'a{0,}'
    cat test| egrep 'a*'

    4.4 定位符
      行首、行尾;单词开头、单词结尾。

     catssssss
    catsssscatsssscat
    查找以cat开头的:
    cat test |grep ‘^cat’
    查找以cat开头,后面多一个字符
    cat test|grep  ‘^cat.’
    查找以cat开头,后面一整行
    cat test|grep  ‘^cat.*’

    查找以cat结尾
    cat test |grep ‘cat$’
    查找以cat结尾的一整行
    cat test |grep ‘.*cat$’

    左边界:左边为空
    cat test | egrep '\bcat'
    右边界:右边为空
    cat test | egrep 'cat\b'
    左右边界:
    cat test | egrep '\bcat\b'

    4.5 反向引用
       提供查找文本中两个相同的相邻单词的匹配项的能力。

    cat test | egrep '(laoma).*(laoma)'
    cat test|grep '(laoma).\1'  #前面小括号第一次出现的值,*表示任意字符。
    返回:laoma laoniu laohu laoma
    cat test|grep '(laoma).*(laoniu).*\2'  laoma  laoniu 出现两次
    返回:laoma laoniu laohu laoma laoniu 

     
      \b:左边边界;[a-z]+:小写字符每个单词;空格;\1:一模一样的 ;\b右边界

    4.6匹配


     cat test | egrep 'ca|bo'
     cat test |grep -e ca -e bo
    以上两者等价。

    cat test |grep -i cat     忽略大小写
    cat test |grep -i -v cat 不包含 cat

    4.7输出

     在 目录/etc 中找包含 servera的文件。
    grep -R 'servera' /etc
    grep -R &(hostname) /etc 查找主机名
    grep -R  &(hostname)  /etc 2>/dev/null  报错的丢掉
    grep -R  &(hostname)  /etc 2>/dev/null  -l 文件名



      

  • 相关阅读:
    WPF 项目开发入门(五)ListView列表组件 与 Expander组件
    .css和.qss的区别
    Vue中组件化编码使用、实现组件之间的参数传递(实战练习二)
    Scratch3.0下载
    element-ui 修改el-form-item样式
    SqlServer常见攻击手法
    C#冒泡排序
    Android Aidl跨进程通讯(四)--接口回调,服务端向客户端发送数据
    DO280管理应用部署--pod调度控制
    [NLP]LLM---大模型指令微调中的“Prompt”
  • 原文地址:https://blog.csdn.net/aggie4628/article/details/127484578