运维八一 运维八一
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)

运维八一

运维,运维!
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)
  • Go

  • Python

  • Shell

    • 前言

    • shell基础

    • Shell高级

      • Shell字符串处理之${}
        • 1. 获取字符串长度
        • 2. 字符串切片
        • 3. 替换字符串
        • 4. 字符串截取
        • 5. 变量状态赋值
        • 6. 字符串颜色
      • Shell表达式与运算符
      • Shell流程控制
      • Shell函数与数组
      • shell正则表达式
    • shell三剑客

  • Java

  • Vue

  • 前端

  • 编程浅尝
  • Shell
  • Shell高级
lyndon
2022-11-06
目录

Shell字符串处理之${}

${}不仅可以用来引用变量,还有一个重要的功能,就是文本处理,单行文本基本上可以满足你所有需求。

# 1. 获取字符串长度

# VAR='hello world!'
# echo $VAR
hello world!

# echo ${#VAR}
12
1
2
3
4
5
6

# 2. 字符串切片

格式:

  • ${parameter:offset}
  • ${parameter:offset:length}

截取从 offset 个字符开始,向后 length 个字符。

#截取 hello 字符串:
# VAR='hello world!'
# echo ${VAR:0:5}
hello

#截取 wo 字符:
# echo ${VAR:6:2}
wo

#截取 world!字符串:
# echo ${VAR:5}
world!

#截取最后一个字符:
# echo ${VAR:(-1)}
!

#截取最后二个字符:
# echo ${VAR:(-2)}
d!

#截取从倒数第 3 个字符后的 2 个字符:
# echo ${VAR:(-3):2}
ld
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# 3. 替换字符串

格式:

  • ${parameter/pattern/string}
# VAR='hello world world!'

#将第一个 world 字符串替换为 WORLD:
# echo ${VAR/world/WORLD}
hello WORLD world!

#将全部 world 字符串替换为 WORLD:
# echo ${VAR//world/WORLD}
hello WORLD WORLD!

#替换正则匹配为空:
# VAR=123abc
# echo ${VAR//[^0-9]/}
123

# echo ${VAR//[0-9]/} #patterm 前面开头一个正斜杠为只匹配第一个字符串,两个正斜杠为匹配所有字符。
abc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 4. 字符串截取

格式:

  • ${parameter#word} # 删除匹配前缀
  • ${parameter##word}
  • ${parameter%word} # 删除匹配后缀
  • ${parameter%%word}
# # 去掉左边,最短匹配模式,##最长匹配模式。
# % 去掉右边,最短匹配模式,%%最长匹配模式。
# URL="http://www.baidu.com/baike/user.html"

# 以//为分隔符截取右边字符串:
# echo ${URL#*//}
www.baidu.com/baike/user.html

#以/为分隔符截取右边字符串:
# echo ${URL##*/}
user.html

#以//为分隔符截取左边字符串:
# echo ${URL%%//*}
http:

#以/为分隔符截取左边字符串:
# echo ${URL%/*}
http://www.baidu.com/baike

#以.为分隔符截取左边:
# echo ${URL%.*}
http://www.baidu.com/baike/user

#以.为分隔符截取右边:
# echo ${URL##*.}
html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 5. 变量状态赋值

  • ${VAR:-string} 如果 VAR 变量为空则返回 string
  • ${VAR:+string} 如果 VAR 变量不为空则返回 string
  • ${VAR:=string} 如果 VAR 变量为空则重新赋值 VAR 变量值为 string
  • ${VAR:?string} 如果 VAR 变量为空则将 string 输出到 stderr
#如果变量为空就返回 hello world!:
# VAR=
# echo ${VAR:-'hello world!'}
hello world!

#如果变量不为空就返回 hello world!:
# VAR="hello"
# echo ${VAR:+'hello world!'}
hello world!

#如果变量为空就重新赋值:
# VAR=
# echo ${VAR:=hello}
hello
# echo $VAR
hello

#如果变量为空就将信息输出 stderr:
# VAR=
# echo ${VAR:?value is null}
-bash: VAR: value is null
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 6. 字符串颜色

字符串输出颜色,有时候关键地方需要醒目,颜色是最好的方式:

字体颜色

  • 30:黑
  • 31:红
  • 32:绿
  • 33:黄
  • 34:蓝色
  • 35:紫色
  • 36:深绿
  • 37:白色

字体背景颜色

  • 40:黑
  • 41:深红
  • 42:绿
  • 43:黄色
  • 44:蓝色
  • 45:紫色
  • 46:深绿
  • 47:白色

显示方式

  • 0:终端默认设置
  • 1:高亮显示
  • 4:下划线
  • 5:闪烁
  • 7:反白显示
  • 8:隐藏

格式:

\033[1;31;40m 	# 1 是显示方式,可选。31 是字体颜色。40m 是字体背景颜色。
\033[0m 	# 恢复终端默认颜色,即取消颜色设置。
1
2

示例:

#!/bin/bash
# 字体颜色
for i in {31..37}; do
echo -e "\033[$i;40mHello world!\033[0m"
done

# 背景颜色
for i in {41..47}; do
echo -e "\033[47;${i}mHello world!\033[0m"
done

# 显示方式
for i in {1..8}; do
echo -e "\033[$i;31;40mHello world!\033[0m"
done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

image-20221106165518815

上次更新: 2022/11/06, 20:20:54
shell变量
Shell表达式与运算符

← shell变量 Shell表达式与运算符→

最近更新
01
ctr和crictl显示镜像不一致
03-13
02
alpine镜像集成常用数据库客户端
03-13
03
create-cluster
02-26
更多文章>
Theme by Vdoing | Copyright © 2015-2024 op81.com
苏ICP备18041258号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式