zoukankan      html  css  js  c++  java
  • grep awk sed 正则表达式,只把匹配的内容(不是整个匹配行)提取出来,保存到 shell 脚本变量

    问题 1

    描述

    bash 脚本中,需要把参数 -J -I 1 -M1 -a1 -x1 中的 -I x 参数提取出来,保存备用。

    确定正则表达式

    -I 后面可以有一个空格,也可以没有,空格之后只能是 01,正则表达式很容易写出来 -I ?[01]

    仅提取匹配内容,而非整行

    可以通过 grep-o 参数实现

    测试

    echo "-J -I0 -M1 -a1 -x1" | grep -oE '-I ?[01]'   # 输出 -I0
    echo "-J -I 1 -M1 -a1 -x1" | grep -oE '-I ?[01]'  # 输出 -I 1
    echo "-J -I 2 -M1 -a1 -x1" | grep -oE '-I ?[01]'  # 输出为空
    echo "-J -M1 -a1 -x1" | grep -oE '-I ?[01]'       # 输出为空
    

    问题 2

    描述

    解决了正则匹配的问题,新的问题又来了。
    脚本内的函数调用有两种方法:通过函数名 foo 直接调用,或者通过 $(foo) 调用。
    注意:加不加 $() 有如下差别:

    #!/bin/bash
    
    GLOBAL_VAR="Initial Value"
    
    function foo()
    {
       GLOBAL_VAR=$(echo "-J -I 1 -M1 -a1 -x1" | grep -oE '-I ?[01]')
       echo "Hello World"
    }
    
    $(foo) # 新建子 shell 执行函数,在子 shell 中改变 GLOBAL_VAR 不影响父 shell 的变量,foo 输出(echo)的内容 Hello World 作为新的命令执行(会提示找不到 Hello 命令!)
    echo $GLOBAL_VAR # 输出"Initial Value"
    
    foo # 在当前 shell 中执行函数,改变 GLOBAL_VAR
    echo $GLOBAL_VAR # 输出"-I 1"
    
    var1=$(foo) # 调用函数 foo,foo 的输出(echo)保存到变量 var1 中,var1 内容为 "Hello World"
    var2=foo # var2 内容为 "foo"
    var3=${foo} # 把变量 foo 的内容(因为没有定义 foo 变量,foo 变量的内容自然为空)保存到 var3 变量
    
    echo "var1: $var1" # 输出 var1: Hello World
    echo "var2: $var2" # 输出 var2: foo
    echo "var3: $var3" # 输出 var3:
    

    注意:即使在 $(foo) 函数中 exportGLOBAL_VAR 也不可以。因为环境变量也是只能在当前 shell 和子 shell 中生效,父 shell 还是无法获取到 export 的变量。

    原文链接:https://www.cnblogs.com/tengzijian/p/15042797.html

  • 相关阅读:
    eclipse svn插件
    eclipse 图片预览插件
    eclipse properties文件插件
    eclipse Failed to load the JNIshared library
    Spark MLlib之线性回归源代码分析
    ul,li不能左右居中的问题
    【日常学习】【搜索/递归】codevs2802 二的幂次方题解
    UVa 112
    查询一个月最后一天的总用户数,数据库中没有保存最好一天的数据,就查询本月数据库已存有的最后一天的数据
    uva:10763
  • 原文地址:https://www.cnblogs.com/tengzijian/p/15042797.html
Copyright © 2011-2022 走看看