shell脚本提取字符串的几种方式

1、使用grep+sed+awk,查找编辑和输出。

例子:取得droped字段的值

原始输出

# show capture
[0 pflow]:     Interface:zc:1@1(12580)
        RX packets:29021 dropped:0
        RX bit/sec:0.00(Mbps) pkt/sec:0.00(pps)

获取指定字段值

value=`show capture`
echo "$value" | grep "dropped" | sed 's/:/ /g' | awk '{print $5}'

说明:使用grep找到字符串所在行,使用sed把冒号替换为空格,使用awk获取想要的字符串

 

2、使用sed正则表达式提取字符串

 

提取数字

[admin]# echo here365test666 | sed "s/.*ere\([0-9]*\)test\([0-9]*\)/\1\ \2/g"
365 666

 

s表示替换,\1和\2分别表示用第一个括号和第二个括号里面的内容,空格需要转义。sed支持*,不支持?、+,不能用d之类,正则支持有限。

整个sed表达式的作用是:用提取出的数字替换原来的字符串。

 

3、字符串变量截取

这种方式需要把字符串存在一个变量中。

我们对以上 8 种格式做一个汇总,请看下表:

格式说明举例
${string: start :length} 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。

[root]# var=HelloWorld
[root]# echo ${var:0:5}
Hello

${string: start} 从 string 字符串的左边第 start 个字符开始截取,直到最后。

[root]# echo ${var:5}
World

${string: 0-start :length} 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。

[root]# echo ${var:0-5:3}
Wor

${string: 0-start} 从 string 字符串的右边第 start 个字符开始截取,直到最后。

[root]# echo ${var:0-5}
World

${string#*chars} 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。

[root]# echo ${var#*l}
loWorld

${string##*chars} 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。

[root]# echo ${var##*l}
d

${string%chars*} 从 string 字符串第一次出现 chars* 的位置开始,截取 chars* 左边的所有字符。

[root]# echo ${var%l*}
HelloWor

${string%%chars*} 从 string 字符串最后一次出现 chars* 的位置开始,截取 chars* 左边的所有字符。

[root]# echo ${var%%l*}
He

 

4、cut

与第3点对应,cut用来直接截取字符串,不需要把字符串存在变量中

cut可以按照字符、字节、列截取数据。

原始文件

[root]# cat test.sh 
abc 123 zz
dfg 457 yy

1)输出第2、3个字符

[root]# cat test.sh | cut -c2-3
bc
fg

2)与【awk】类似,输出指定列

[root@skyeye admin]# cat test.sh | cut -d " " -f2
123
457

 

5、tr

tr主要是替换字符串。

1)最常见的场景就是压缩空白格

[root]# echo 'hello           123              world             456 !!!' | tr -s ' '
hello 123 world 456 !!!

-s参数指定要压缩的内容为空格

2)与【sed】类似,替换和删除字符串

例如制表符替换为空格

[root@skyeye admin]# cat test.sh 
abc    123    zz
dfg    457    yy
[root@skyeye admin]# cat test.sh | tr "\t" " "
abc 123 zz
dfg 457 yy

例如删除数字

[root@skyeye admin]# cat test.sh 
abc    123    zz
dfg    457    yy
[root@skyeye admin]# cat test.sh | tr -d "{0-9}"
abc        zz
dfg        yy

 

posted @ 2022-12-27 13:11  超级宝宝11  阅读(8123)  评论(0编辑  收藏  举报