Bash 字符串处理

一、截取

语法格式 说明
${string: start :length} 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。
${string: start} 从 string 字符串的左边第 start 个字符开始截取,直到最后。
${string: 0-start :length} 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。
${string: 0-start} 从 string 字符串的右边第 start 个字符开始截取,直到最后。

${string#*substr}

从 string 字符串第一次出现 *substr 的位置开始,截取 *substr 右边的所有字符。
${string##*substr} 从 string 字符串最后一次出现 *substr 的位置开始,截取 *substr 右边的所有字符。
${string%*substr} 从 string 字符串第一次出现 *substr 的位置开始,截取 *substr 左边的所有字符。
${string%%*substr} 从 string 字符串最后一次出现 *substr 的位置开始,截取 *substr 左边的所有字符。

 

二、替换

 

语法格式 说明
${string/substring/replacement} 使用$replacement, 来代替第一个匹配的$substring
${string//substring/replacement} 使用$replacement, 代替所有匹配的$substring
${string/#substring/replacement} 如果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
${string/%substring/replacement} 如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring

 

三、字符串数组

Shell 数组用括号来表示,元素用"空格"符号分割开;

3.1 使用空格生成数组

将字符串列表转变为数组,只需要在前面加(),例如:arr=(string)  echo ${arr[@]}

3.2 使用其他字符,把字符串分割成数组

如果需要按指定符号分割成数组,那么需要把指定符号替换成空格

1)这个想法是使用字符串替换:

string="1:2:3:4:5"
set -f                      # avoid globbing (expansion of *).
array=(${string//:/ })
for i in "${!array[@]}"
do
    echo "$i=>${array[i]}"
done

 

将$ substring的所有匹配项替换为空格,然后使用替换的字符串初始化数组:

2 使用 tr 配合

t="one,two,three"
a=($(echo "$t" | tr ',' '\n'))
echo "${a[2]}"

3.3 数组操作

1)分隔后的全部数组

${arr[@]}

2)分隔后的每一项

${arr[0]} ${arr[1]} ...

3)分割后的数组长度

${#arr[@]}

4)存储整个索引值

${!arr[@]}

 

posted @ 2023-08-29 09:02  雪花飞旋  阅读(52)  评论(0编辑  收藏  举报