Linux shell字符串截取、替换、删除以及trim

Catalogue
  1. 1. 字符串截取
    1. 1.1. 从左向右截取第一个//后的字符串
    2. 1.2. 从左向右截取最后一个//后的字符串
    3. 1.3. 从右向左截取第一个//后的字符串
    4. 1.4. 从右向左截取最一个//后的字符串
    5. 1.5. 截取位置0后3个字符
    6. 1.6. 从位置1截取到末尾
    7. 1.7. 从位置-1截取到末尾,就是截取最后一个
  2. 2. 字符串替换
    1. 2.1. 将所有匹配的//替换为cd
    2. 2.2. 前缀匹配,只匹配从位置0开始的字符
    3. 2.3. 后缀匹配,只匹配结尾字符
  3. 3. 字符串删除
    1. 3.1. 删除前3个字符
    2. 3.2. 删除后3个字符
    3. 3.3. 删除第一个ab
    4. 3.4. 删除所有ab
    5. 3.5. 删除最后一个ab
    6. 3.6. 字符串trim

字符串截取

从左向右截取第一个//后的字符串

1
2
3
word=abcd-//master-01://httpab
echo ${word#*//}
# 输出:master-01://httpab

从左向右截取最后一个//后的字符串

1
2
3
word=abcd-//master-01://httpab
echo ${word##*//}
# 输出:httpab

从右向左截取第一个//后的字符串

1
2
3
word=abcd-//master-01://httpab
echo ${word%//*}
# 输出:abcd-//master-01:

从右向左截取最一个//后的字符串

1
2
3
word=abcd-//master-01://httpab
echo ${word%%//*}
# 输出:abcd-

截取位置0后3个字符

1
2
3
word=abcd-//master-01://httpab
echo ${word:0:3}
# 输出:abc

从位置1截取到末尾

1
2
3
word=abcd-//master-01://httpab
echo ${word:1}
# 输出:bcd-//master-01://httpab

从位置-1截取到末尾,就是截取最后一个

1
2
3
word=abcd-//master-01://httpab
echo ${word:(-1)}
# 输出:b

字符串替换

1
2
3
4
从左到右,匹配第一个,替换//为cd
word=abcd-//master-01://httpab
echo ${word/\/\//cd}
# 输出:abcd-cdmaster-01://httpab

将所有匹配的//替换为cd

1
2
3
word=abcd-//master-01://httpab
echo ${word//\/\//cd}
# 输出:abcd-cdmaster-01:cdhttpab

前缀匹配,只匹配从位置0开始的字符

1
2
3
4
5
6
word=abcd-//master-01://httpab
echo ${word/#ab/cd}
# -不是前缀,会匹配失败
echo ${word/#-/cd}
# 输出:abcd-cdmaster-01://httpab
# 输出:abcd-//master-01://httpab

后缀匹配,只匹配结尾字符

1
2
3
4
5
6
7
8
word=abcd-//master-01://httpab
echo ${word/%http*/xy}
# 输出:abcd-//master-01://xy
echo ${word/%ab/xy}
# 输出:abcd-//master-01://httpxy
echo ${word/%ab*/xy}
# 出现*,会从起始匹配
# 输出:xy

字符串删除

利用字符截取和替换,以及拼接可以实现删除字符的效果

删除前3个字符

1
2
3
word=abcd-//master-01://httpab
echo ${word#*${word:0:3}}
# 输出:d-//master-01://httpab

删除后3个字符

1
2
3
word=abcd-//master-01://httpab
echo ${word%*${word:(-3)}}
# 输出:abcd-//master-01://htt

删除第一个ab

1
2
3
word=abcd-//master-01://httpab
echo ${word/ab/}
# 输出:cd-//master-01://httpab

删除所有ab

1
2
3
word=abcd-//master-01://httpab
echo ${word//ab/}
# 输出:cd-//master-01://http

删除最后一个ab

1
2
3
word=abcd-//master-01://httpabcd
echo ${word%ab*}${word##*ab}
# 输出:abcd-//master-01://httpcd

字符串trim

1
2
3
4
5
利用xargs可以实现trim
word=" hello wolrd "
word=`echo $word | xargs`
echo $word
# 输出:hello wolrd

参考链接