linux ${} 字符串替换

linux ${} 字符串替换

1. 字符串截取

假设定义一个参数为 a=/a1/a2/a3/1.2.3.txt

1️⃣ 删除第一个 / 及其左边所有的内容
[root@node2 ~]# a=/a1/a2/a3/1.2.3.txt
[root@node2 ~]# echo ${a#*/}
a1/a2/a3/1.2.3.txt

# 或者
[root@node2 ~]# echo ${a#/*}
a1/a2/a3/1.2.3.txt
2️⃣ 删除最后一个 / 及其左边所有的内容
[root@node2 ~]# echo ${a##*/}
1.2.3.txt
3️⃣ 删除第一个 . 及其左边所有的内容
[root@node2 ~]# echo ${a#*.}
2.3.txt
4️⃣ 删除最后一个 . 及其左边所有的内容
[root@node2 ~]# echo ${a##*.}
txt
5️⃣ 删除最后一个 / 及其右边所有的内容
[root@node2 ~]# echo ${a%/*}
/a1/a2/a3
6️⃣ 删除第一个 / 及其右边所有内容
[root@node2 ~]# echo ${a%%/*}

# 这里得到的是一个空值
7️⃣ 删除最后一个 . 及其右边所有的内容
[root@node2 ~]# echo ${a%.*}
/a1/a2/a3/1.2.3
8️⃣ 删除第一个 . 及其右边所有的内容
[root@node2 ~]# echo ${a%%.*}
/a1/a2/a3/1

2. 字符串切片

格式:${a:\b:c}(注:这里使用 \b 是因为 makedown 格式中会将两个 : 之间的 b 变成一个符号)

解析:将字符串变量 a 从第 b 个位置开始向后截取 c 长度的字符。b 是下标(下标从 0 开始)

定义一个参数:aa=“hello world”

1️⃣ 截取前5个字符
[root@node2 ~]# echo ${aa:0:5}
hello
2️⃣ 截取最后5个字符
[root@node2 ~]# echo ${aa:5}
world
3️⃣ 截取指定下标的内容
[root@node2 ~]# echo ${aa:6:5}
world
4️⃣ 截取最后一个字符
[root@node2 ~]# echo ${aa:(-1)}
d
5️⃣ 截取倒数5个字符
[root@node2 ~]# echo ${aa:(-5)}
world
6️⃣ 截取倒数第5个字符开始的2个字符
[root@node2 ~]# echo ${aa:(-5):2}
wo

3. 字符串替换

格式:${a/b/c}

解析:将变量a中的b全部替换为c,开头一个正斜杠为只匹配第一个字符串,两个正斜杠为匹配所有字符。

定义一个参数:aa=“hello world world”

1️⃣ 匹配字符串替换
[root@node2 ~]# echo ${aa/world/tom}
hello tom world
2️⃣ 全部匹配替换
[root@node2 ~]# echo ${aa//world/tom}
hello tom tom
3️⃣ 使用正则匹配

定义一个参数:demo=“123abc234$%”

# 匹配除了数字以外的所有内容,并替换成空
[root@node2 ~]# echo ${demo//[^0-9]/}
123234

# 匹配数字,并全部替换为空
[root@node2 ~]# echo ${demo//[0-9]/}
abc$%

# 匹配除数字以外的字符,并替换成 = (注:这里是单一替换,即一个字符替换一次)
[root@node2 ~]# echo ${demo//[^0-9]/=}
123===234==
# 这里是单个匹配
[root@node2 ~]# echo ${demo/[^0-9]/=}
123=bc234$%

# 匹配所有数字,并替换成指定内容
[root@node2 ~]# echo ${demo//[0-9]/=}
===abc===$%
4️⃣ 使用变量替换

定义一个参数:demo=“1.1.1.1/aaa/bbb:tom.test.com”

修改需求:

​ 修改参数中 : 后的第一个参数的内容为 “xiaoming”,即结果为 “1.1.1.1/aaa/bbb:xiaoming.test.com”

# 获取 : 后的参数内容 
demo="1.1.1.1/aaa/bbb:tom.test.com"
name=`echo $demo | awk -F':' '{print $2}' | awk -F'.' '{print $1}'`
echo ${demo/$name/xiaoming}

4. 变量状态赋值

定义一个参数 aa=“hello tom”

# ${VAR:-string} 如果 VAR 变量不为空则返回 VAR
[root@node2 ~]# echo ${aa:-'hello world!'}
hello tom

# ${VAR:-string} 如果 VAR 变量为空则返回 string
[root@node2 ~]# echo ${bb:-'hello world!'}
hello world!

# ${VAR:-string} 如果 VAR 变量不为空则返回 string
[root@node2 ~]# echo ${aa:+'hello world!'}
hello world!

# ${VAR=string} 如果变量为空就重新赋值
[root@node2 ~]# echo ${aa:=123}
hello tom
[root@node2 ~]# echo ${bb:=123}
123

#如果变量为空就将信息输出 stderr:
[root@node2 ~]# echo ${aa:?value is null}
hello tom
[root@node2 ~]# echo ${BB:?value is null}
-bash: BB: value is null

 
 
 
 
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值