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

原文链接:https://www.cnblogs.com/superbaby11/p/17007867.html

shell脚本提取字符串的几种方式
1、使用grep+sed+awk,查找编辑和输出。

例子:取得droped字段的值

原始输出

show capture

    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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值