expr match "$pwrdm_stat" ".*,\($pwr_state:[0-9]*\)" 不理解

从字符串开始的位置匹配子串的长度

  expr match "$string" '$substring' $substring是一个正则表达式
  expr "$string" : '$substring'  $substring是一个正则表达式
 
expr match "$string" '\($substring\)'

从$string的开始位置提取$substring,$substring是一个正则表达式.  
expr "$string" : '\($substring\)'
从$string的开始位置提取$substring,$substring是一个正则表达式.
stringZ=abcABC123ABCabc  
    echo `expr match "$stringZ" '\(.[b-c]*[A-Z]..[0-9]\)'`   # abcABC1
    echo `expr "$stringZ" : '\(.[b-c]*[A-Z]..[0-9]\)'`     # abcABC1
    echo `expr "$stringZ" : '\(.......\)'`           # abcABC1
 
所以:
expr match "$pwrdm_stat" ".*,\($pwr_state:[0-9]*\)"
. 代表一定有一个任意字符
* 代表重复零到无穷多个前一个字符
 
pwr_state=xx
# expr match "1233,xx:99xxx" ".*,\($pwr_state:[0-9]*\)"
.*, 一个任意字符 重复零到无穷多个前一个字符(重复3次任意字符) 外加一个逗号,
提取xx:[0-9]* 表示xx:后跟0-9任意一个数字,*表示重复零到无穷多个前一个字符
 输出结果为:xx:99

 
 
转自 https://www.cnblogs.com/tychyg/p/5067453.html 备用

shell字符串操作技巧

操作字符串
--------------
Bash支持超多的字符串操作,操作的种类和数量令人惊异.但不幸的是,这些工具缺乏集中性.
一些是参数替换的子集,但是另一些则属于UNIX的expr命令.这就导致了命令语法的不一致和
功能的重叠,当然也会引起混乱. 、字符串长度
${#string}
expr length $string
expr "$string" : '.*' stringZ=abcABC123ABCabc echo ${#stringZ}
echo `expr length $stringZ`
echo `expr "$stringZ" : '.*'` 、从字符串开始的位置匹配子串的长度
expr match "$string" '$substring' $substring是一个正则表达式
expr "$string" : '$substring' $substring是一个正则表达式 stringZ=abcABC123ABCabc
echo `expr match "$stringZ" 'abc[A-Z]*.2'`
echo `expr "$stringZ" : 'abc[A-Z]*.2'`
、索引
expr index $string $substring 匹配到子串的第一个字符的位置.
stringZ=abcABC123ABCabc
echo `expr index "$stringZ" C12` echo `expr index "$stringZ" 1c`
# 'c' (in # position) matches before ''. 在C语言中最近的等价函数为strchr().
提取子串
${string:position}
在string中从位置$position开始提取子串.
如果$string为"*"或"@",那么将提取从位置$position开始的位置参数,[]
${string:position:length}
在string中从位置$position开始提取$length长度的子串. ################################StartScript######################################
stringZ=abcABC123ABCabc
# .....
# -based indexing. echo ${stringZ:} # abcABC123ABCabc
echo ${stringZ:} # bcABC123ABCabc
echo ${stringZ:} # 23ABCabc
echo ${stringZ::} # 23A
# 3个字符长度的子串.
# 有没有可能从字符结尾开始,反向提取子串? echo ${stringZ:-} # abcABC123ABCabc
# 以${parameter:-default}方式,默认是提取完整地字符串.
# 然而 . . .
echo ${stringZ:(-)} # Cabc
echo ${stringZ: -} # Cabc
# 现在,它可以工作了.
# 使用圆括号或者添加一个空格来转义这个位置参数. 如果$string参数为"*"或"@",那将最大的提取从$position开始的$length个位置参数. echo ${*:} # Echo出第2个和后边所有的位置参数.
echo ${@:} # 与前边相同.
echo ${*::} # 从第2个开始,Echo出后边3个位置参数.
expr substr $string $position $length
在string中从位置$position开始提取$length长度的子串.
stringZ=abcABC123ABCabc
# ......
# -based indexing. echo `expr substr $stringZ ` # ab
echo `expr substr $stringZ ` # ABC expr match "$string" '\($substring\)'
从$string的开始位置提取$substring,$substring是一个正则表达式. expr "$string" : '\($substring\)'
从$string的开始位置提取$substring,$substring是一个正则表达式.
stringZ=abcABC123ABCabc echo `expr match "$stringZ" '\(.[b-c]*[A-Z]..[0-9]\)'` # abcABC1
echo `expr "$stringZ" : '\(.[b-c]*[A-Z]..[0-9]\)'` # abcABC1
echo `expr "$stringZ" : '\(.......\)'` # abcABC1
# All of the above forms give an identical result.
子串削除
${string#substring}
从$string的左边截掉第一个匹配的$substring
${string##substring}
从$string的左边截掉最后一个个匹配的$substring
stringZ=abcABC123ABCabc
# |----|
# |----------| echo ${stringZ#a*C} # 123ABCabc
# 截掉'a'和'C'之间最近的匹配. echo ${stringZ##a*C} # abc
# 截掉'a'和'C'之间最远的匹配. ${string%substring}
从$string的右边截掉第一个匹配的$substring
${string%%substring}
从$string的右边截掉最后一个匹配的$substring stringZ=abcABC123ABCabc
# ||
# |------------| echo ${stringZ%b*c} # abcABC123ABCa
# 从$stringZ的后边开始截掉'b'和'c'之间的最近的匹配 echo ${stringZ%%b*c} # a
# 从$stringZ的后边开始截掉'b'和'c'之间的最远的匹配 Example - 利用修改文件名,来转换图片格式
################################StartScript######################################
#!/bin/bash
# cvt.sh:
# 把一个目录下的所有MacPaint格式的图片文件都转换为"pbm"格式的图片文件. # 使用来自"netpbm"包的"macptopbm"程序,
#+ 这个程序主要是由Brian Henderson(bryanh@giraffe-data.com)来维护的.
# Netpbm是大多数Linux发行版的标准部分. OPERATION=macptopbm
SUFFIX=pbm # 新的文件名后缀 if [ -n "$1" ]
then
directory=$ # 如果目录名作为第1个参数给出...
else
directory=$PWD # 否则使用当前的工作目录.
fi # 假设在目标目录中的所有文件都是MacPaint格式的图片文件,
#+ 以".mac"为文件名的后缀. for file in $directory/* # Filename globbing.
do
filename=${file%.*c} # 去掉文件名的".mac"后缀
#+ ('.*c' matches everything
#+ ('.*c' 将匹配'.'和'c'之间的任何字符串). $OPERATION $file > "$filename.$SUFFIX"
# 转换为新的文件名.
rm -f $file # 转换完毕后删除原有的文件.
echo "$filename.$SUFFIX" # 从stdout输出反馈.
done exit 0 # 修改这个脚本,让他只转换以".mac"为后缀的文件.
################################EndScript#######################################
一个简单的模拟getopt命令的办法就是使用子串提取结构.
Example 9-12 模仿getopt命令
################################StartScript######################################
#!/bin/bash
# getopt-simple.sh
# Author: Chris Morgan
# 授权使用在ABS Guide中. getopt_simple()
{
echo "getopt_simple()"
echo "Parameters are '$*'"
until [ -z "$1" ]
do
echo "Processing parameter of: '$1'"
if [ ${1:0:1} = '/' ]
then
tmp=${1:1} # 去掉开头的'/' . . .
parameter=${tmp%%=*} # 提取名字.
value=${tmp##*=} # 提取值.
echo "Parameter: '$parameter', value: '$value'"
eval $parameter=$value
fi
shift
done
} # 传递所有的选项到getopt_simple().
getopt_simple $* echo "test is '$test'"
echo "test2 is '$test2'" exit 0 --- sh getopt_example.sh /test=value1 /test2=value2 Parameters are '/test=value1 /test2=value2'
Processing parameter of: '/test=value1'
Parameter: 'test', value: 'value1'
Processing parameter of: '/test2=value2'
Parameter: 'test2', value: 'value2'
test is 'value1'
test2 is 'value2'
################################EndScript#######################################
子串替换
${string/substring/replacement}
使用$replacement来替换第一个匹配的$substring.
${string//substring/replacement}
使用$replacement来替换所有匹配的$substring. 1 stringZ=abcABC123ABCabc
2
3 echo ${stringZ/abc/xyz} # xyzABC123ABCabc
4 # 用'xyz'来替换第一个匹配的'abc'.
5
6 echo ${stringZ//abc/xyz} # xyzABC123ABCxyz
7 # 用'xyz'来替换所有匹配的'abc'. ${string/#substring/replacement}
如果$substring匹配$string的开头部分,那么就用$replacement来替换$substring.
${string/%substring/replacement}
如果$substring匹配$string的结尾部分,那么就用$replacement来替换$substring.
1 stringZ=abcABC123ABCabc
2
3 echo ${stringZ/#abc/XYZ} # XYZABC123ABCabc
4 # 用'XYZ'替换开头的'abc'
5
6 echo ${stringZ/%abc/XYZ} # abcABC123ABCXYZ
7 # 用'XYZ'替换结尾的'abc' 9.2.1 使用awk来操作字符串
~~~~~~~~~~~~~~~~~~~~~~~~~
Bash脚本也可以使用awk来操作字符串.
Example 9-13 提取字符串的一种可选的方法
################################StartScript######################################
#!/bin/bash
# substring-extraction.sh String=23skidoo1
# 012345678 Bash
# 123456789 awk
# 注意,对于awk和Bash来说,它们使用的是不同的string索引系统:
# Bash的第一个字符是从'0'开始记录的.
# Awk的第一个字符是从'1'开始记录的. echo ${String:2:4} # 位置3 (0-1-2), 4 个字符长
# skid # awk中等价于${string:pos:length}的命令是substr(string,pos,length).
echo | awk '
{ print substr("'"${String}"'",3,4) # skid
}
'
# 使用一个空的"echo"通过管道给awk一个假的输入,
#+ 这样可以不用提供一个文件名.

shell expr match的更多相关文章

  1. linux shell expr 使用

    linux shell expr 使用 收藏人:春秋百味 -- | 阅: 转: | | 分享 非原创, 摘自:<LINUX与UNIX Shell编程指南> 17.5 expr用法 expr ...

  2. Shell expr的用法 bc 命令 let命令

    Shell expr的用法  bc 命令   let命令 数学运算 let命令  expr命令  bc命令  $(())   $[] http://www.80ops.cn/archives/245. ...

  3. shell expr用法

    expr 计算整数变量值 使用方法如下: linux-zpycfm:/home/test/shell # s=+ -bash: +: command not found linux-zpycfm:/h ...

  4. shell expr的用法

    root@tcx4440-03:~# var=$var+1root@tcx4440-03:~# echo $var3+1 要想达到预期结果,用下列三种方法: (1)let "var+=1&q ...

  5. shell expr 的使用注意事项

    #!/bin/bash a=10 b=20 c=`expr $a + $b` echo "a + b :$c" c='expr $a + $b' echo "a + b ...

  6. shell expr 文件扩展名判断 整数判断

    expr "text.sh" : ".*\.sh" &>/dev/null && echo "yes" ||e ...

  7. expr命令总结

    expr在linux中是一个功能非常强大的命令.通过学习做一个小小的总结.1.计算字符串的长度.我们可以用awk中的length(s)进行计算.我们也可以用echo中的echo ${#string}进 ...

  8. linux中expr用法

    名称:expr  ### 字串长度  shell>> expr length "this is a test"  14  ### 数字商数  shell>> ...

  9. expr的字符串操作 表达式: length, index, match, substr等

    参考: http://www.linuxidc.com/Linux/2012-04/58095.htm expr的格式, 主要有两个, 一是 用expr option, 选项: 二是, expr的几个 ...

随机推荐

  1. cnpm与npm的区别

    原文地址:https://blog.csdn.net/chi1130/article/details/72773278 npm介绍 说明:npm(node package manager)是nodej ...

  2. typedef 详解

    一行很常用的代码: typedef int XX_Size_Check[(sizeof(XX)==64)? 1:-1]; 很容易猜到上面这行代码是要在编译时检查XX的size,但再深究点,我们就会发现 ...

  3. 万恶之源 - Python 自定义模块

    自定义模块 我们今天来学习一下自定义模块(也就是私人订制),我们要自定义模块,首先就要知道什么是模块啊 一个函数封装一个功能,比如现在有一个软件,不可能将所有程序都写入一个文件,所以咱们应该分文件,组 ...

  4. Mac搭建PHP+rabbitMQ环境

    RabbitMQ是一个在AMQP基础上实现的企业级消息系统.何谓消息系统,就是消息队列系统,消息队列是“”消费-生产者模型“”的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅 ...

  5. [py]py里的isinstance判断实例来源(含父类)

    Isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type(). isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型,不考虑继承关系. ...

  6. vector erase的错误用法

    直接写 a.erase(it)是错误的,一定要写成it=a.erase(it)这个错误编译器不会报错.而且循环遍历删除的时候,删除了一个元素,容器里会自动向前移动,删除一个元素要紧接着it--来保持位 ...

  7. 前端获取的数据是undefined

    var id = $("id1").val(); var username = $("username1").val(); var password = $(& ...

  8. AIX挂载NFS写入效率低效解决

    背景: Linux是NFS的Server端,AIX是NFS的Client端(此外,有一个Linux也作为Client端对比测试). 1.NFS对应的底层设备是闪存卡,本地测试I/O写性能可达2GB/s ...

  9. 关于Stuck Archiver的疑问

    客户使用crsctl stat res -t命令去查看RAC集群状态时,发现异常,知晓Stuck Archiver代表归档满,问我们为什么RAC是同一个库,只有实例1显示Stuck Archiver, ...

  10. sql 一列拼接成一行,再分割成列

    原始数据,需要拼接成一行 select * from (select d.*,(SELECT count ([Keyword])FROM [DragonGuoShi].[dbo].[ArticleIn ...