grep awk sed 正则表达式,只把匹配的内容(不是整个匹配行)提取出来,保存到 shell 脚本变量
2021-07-22 20:47
1006 查看
问题 1
描述
bash 脚本中,需要把参数
-J -I 1 -M1 -a1 -x1中的
-I x参数提取出来,保存备用。
确定正则表达式
-I后面可以有一个空格,也可以没有,空格之后只能是
0或
1,正则表达式很容易写出来
-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)函数中
export了
GLOBAL_VAR也不可以。因为环境变量也是只能在当前 shell 和子 shell 中生效,父 shell 还是无法获取到 export 的变量。
原文链接:https://www.cnblogs.com/tengzijian/p/15042797.html
相关文章推荐
- shell脚本知识(三) 正则表达式 grep sed awk
- Shell脚本中通过正则表达式匹配IP地址
- shell脚本--grep与正则表达式
- shell脚本--grep与正则表达式
- 让shell脚本中的正则表达式调用变量
- objective-c 正则表达式 -NSRegularExpression 提取匹配内容
- shell里使用正则表达式提取括号中的内容
- js正则 - 显示或者保存正则表达式匹配的部分内容
- shell脚本学习笔记之grep&正则表达式
- 13 shell脚本--005grep和正则表达式
- shell脚本----读取一个文本文件将内容按行保存成数组变量
- shell脚本之正则表达式、函数、grep、sed、awk、printf等基本命令配置详解
- 显示或者保存正则表达式匹配的部分内容
- Shell脚本中通过正则表达式匹配IP地址
- Shell脚本正则表达式之——grep、egrep、sed(内含多个Demo)
- shell正则提取字符串中的数字并保存到变量中
- shell脚本之正则表达式、grep、sed、awk
- 【shell脚本】匹配函数的正则表达式
- Linux日常——shell工具之grep(包含正则表达式)、sed
- QTP脚本中使用正则表达式,匹配字符串方法