Bash中的字符串操作
我们将学习如何使用各种字符串操作来操纵字符串。
我们将学习如何获取字符串,连接字符串,提取子串的长度,替换子串,更重要!
获取字符串长度
让我们从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
我们还可以将字符串中的某些字符更改为大写或者小写;例如,我们可以如下更改图例字符串中的大写字母j
和n
:
Hyman@theitroad:~/scripts$echo ${legend^^[jn]} JohN Nash