shell命令--字符串截取

发布时间 2023-04-15 14:33:02作者: 是对的人

shell 截取字符串通常有两种方式:截取指定长度的字符串和截取指定模式的字符串。

1. 截取指定长度的字符串

这种方式除了需要指定起始位置还需要指定截取长度。按起始位置可以分为从左边开始或者从右边开始。

a.从左边开始截取

${string:start:length}

其中,string 是要截取的字符串,start 是起始位置(从 0 开始计数),length 是要截取的长度(省略的话表示直到字符串的末尾)。

示例:

#!/bin/bash

string="hello world!"
echo ${string}
echo ${string:0:7}
echo ${string:1}

其结果为:

hello world!
hello w
ello world!

b.从右边开始截取

${string:0-start:length}

start 前面加上 0- 时,代表了从右边开始。需要注意的是从右边开始计数时,起始数字是 1 。

示例:

#!/bin/bash

string="hello world!"
echo ${string}
echo ${string:0-6:5}
echo ${string:0-1}

其结果为:

hello world!
world
!

2. 截取指定模式的字符串

a. 使用 # 或者 ## 截取右边字符串

${string#*chars}
${string##*chars}

其中,string 是要截取的字符串,chars 是指定的字符串,*是通配符的一种,表示任意长度的字符串。

第一个命令是指从string字符串起始位置往右寻找 chars 字符串,找到第一个 chars 位置后,忽略 chars 以及其左边的字符串,截取右边的字符串。

第二个命令是指从string字符串起始位置往右寻找 chars 字符串,找到最后一个 chars 位置后,忽略 chars 以及其左边的字符串,截取右边的字符串。

示例:

#!/bin/bash

string=$(pwd)
echo ${string}
echo ${string#*/}
echo ${string##*/}

其结果为:

/root/workspace/shell
root/workspace/shell
shell

b. 使用 % 或者 %% 截取左边字符串

${string%chars*}
${string%%chars*}

因为要截取 chars 左边的字符,而忽略 chars 右边的字符,所以*应该位于 chars 的右侧。

第一个命令是指从string字符串结尾位置往左寻找 chars 字符串,找到第一个 chars 位置后,忽略 chars 以及其右边的字符串,截取左边的字符串。

第二个命令是指从string字符串结尾位置往左寻找 chars 字符串,找到最后一个 chars 位置后,忽略 chars 以及其右边的字符串,截取左边的字符串。

示例:

#!/bin/bash

string=$(pwd)
echo ${string}
echo ${string%/*}
echo ${string%%/*}

其结果为:

/root/workspace/shell
/root/workspace