linux ${} 字符串替换

文章目录

  • linux ${} 字符串替换
    • 1. 字符串截取
        • :one: 删除第一个 / 及其左边所有的内容
        • :two: 删除最后一个 / 及其左边所有的内容
        • :three: 删除第一个 . 及其左边所有的内容
        • :four: 删除最后一个 . 及其左边所有的内容
        • :five: 删除最后一个 / 及其右边所有的内容
        • :six: 删除第一个 / 及其右边所有内容
        • :seven: 删除最后一个 . 及其右边所有的内容
        • :eight: 删除第一个 . 及其右边所有的内容
    • 2. 字符串切片
        • :one: 截取前5个字符
        • :two: 截取最后5个字符
        • :three: 截取指定下标的内容
        • :four: 截取最后一个字符
        • :five: 截取倒数5个字符
        • :six: 截取倒数第5个字符开始的2个字符
    • 3. 字符串替换
        • :one: 匹配字符串替换
        • :two: 全部匹配替换
        • :three: 使用正则匹配
        • :four: 使用变量替换
    • 4. 变量状态赋值

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

 
 
 
 
 

你可能感兴趣的:(Linux,linux字符串替换,linux字符串变量替换,linux字符串截取)