Bash中的字符串操作

时间:2020-03-05 15:31:41  来源:igfitidea点击:

我们将学习如何使用各种字符串操作来操纵字符串。
我们将学习如何获取字符串,连接字符串,提取子串的长度,替换子串,更重要!

获取字符串长度

让我们从Bash中获取一个字符串的长度。

字符串只不过是一个字符的序列(数组)。
让我们创建一个名为Distro的字符串并将其值初始化为"Ubuntu"。

distro="Ubuntu"

现在要获得发行版的长度,只需在变量名称之前添加#
我们可以使用以下echo语句:

Hyman@theitroad:~/scripts$echo ${#distro}
6

请注意,Echo命令用于打印该值。
{#string}是什么给出了字符串的长度。

连接两个字符串

我们可以将字符串添加到另一个字符串的末尾;此过程称为字符串连接。

要演示,让我们首先创建两个字符串str1和str2,如下所示:

str1="hand"
str2="book"

现在,我们可以加入两个字符串并将结果分配给名为str3的新字符串,如下所示:

str3=$str1$str2

查找子字符串

我们可以在字符串中找到特定字母或者单词的位置(索引)。
要演示,让我们首先创建一个名为str的字符串,如下所示:

str="Bash is Cool"

现在,我们可以获得子字符串冷却的特定位置(索引)。
要完成此功能,请使用"expr""命令:

Hyman@theitroad:~/scripts$word="Cool"
Hyman@theitroad:~/scripts$expr index "$str" "$word"
9

结果9是"Cool"在str字符串中开始的索引。

I am deliberately avoiding using conditional statements such as if, else because in this bash beginner series, conditional statements will be covered later.

提取子字符串

我们还可以从字符串中提取子字符串;也就是说,我们可以从字符串中提取一个字母,单词或者几个单词。

要演示,让我们首先创建一个名为theitroad的字符串,如下所示:

theitroad="Fedora is a free operating system"

现在让我们说你想在骨串中提取第一个单词"fedora"。
我们需要指定所需子字符串的起始位置(索引)和所需的字符数。

因此,要提取子字符串"Fedora",我们将使用0作为起始位置,并且我们将从起始位置提取6个字符:

Hyman@theitroad:~/scripts$echo ${theitroad:0:6}
Fedora

请注意,字符串中的第一个位置就像Bash中的阵列一样。

我们还可以仅指定子字符串的起始位置并省略字符数。
在这种情况下,将提取来自启动位置到字符串末尾的所有内容。

例如,从骨串中提取子字符串"免费操作系统";我们只需要指定起始位置12:

Hyman@theitroad:~/scripts$echo ${theitroad:12}
free operating system

Bash字符串比较:3个实例

在本教程中,我们将学习如何在Bash shell脚本中进行比较字符串。
我们也会学会检查字符串是否为空或者空。

igi Prakashlinux手册

替换子串

我们还可以用另一个子字符串替换子字符串;例如,我们可以将"Ubuntu"替换为"ubuntu",如下所示:

Hyman@theitroad:~/scripts$echo ${theitroad/Fedora/Ubuntu}
Ubuntu is a free operating system

让我们做另一个例子,让我们用"流行"替换"免费":

Hyman@theitroad:~/scripts$echo ${theitroad/free/popular}
Fedora is a popular operating system

由于我们只需用echo命令打印值,因此原始字符串不会更改。

删除子串

我们还可以删除子串。
要演示,让我们首先创建一个名为事实的字符串:

fact="Sun is a big star"

我们现在可以从字符串事实中删除子字符串"big":

Hyman@theitroad:~/scripts$echo ${fact/big}
Sun is a star

让我们创建另一个名为cell的字符串:

cell="112-358-1321"

现在让我们说要从单元格字符串中删除所有短划线;以下语句只会删除单元格字符串中的第一个破折号:

Hyman@theitroad:~/scripts$echo ${cell/-}
112358-1321

要从单元格字符串中删除所有DASH出现,我们必须使用双向斜杠,如下所示:

Hyman@theitroad:~/scripts$echo ${cell//-}
1123581321

请注意,我们正在使用Echo语句,因此单元格字符串完好无损而未修改;我们只是显示所需的结果!

要修改字符串,我们需要将结果分配回字符串,如下所示:

Hyman@theitroad:~/scripts$echo $cell
112-358-1321
Hyman@theitroad:~/scripts$cell=${cell//-}
Hyman@theitroad:~/scripts$echo $cell
1123581321

将大写和小写字母转换为字符串

我们还可以将字符串转换为小写字母或者大写字母。
让我们首先创建一个名为Legend和Actor的字符串:

legend="john nash"
actor="JULIA ROBERTS"

我们可以将图例字符串中的所有字母转换为大写:

Hyman@theitroad:~/scripts$echo ${legend^^}
JOHN NASH

我们还可以将Actor String中的所有字母转换为小写:

Hyman@theitroad:~/scripts$echo ${actor,,}
julia roberts

我们还可以仅将图例字符串的第一个字符转换为大写,如下所示:

Hyman@theitroad:~/scripts$echo ${legend^}
John nash

同样,我们可以仅将演员字符串的第一个字符转换为小写,如下所示:

Hyman@theitroad:~/scripts$echo ${actor,}
jULIA ROBERTS

我们还可以将字符串中的某些字符更改为大写或者小写;例如,我们可以如下更改图例字符串中的大写字母jn

Hyman@theitroad:~/scripts$echo ${legend^^[jn]}
JohN Nash