在 Bash 中拆分字符串
本文演示了在 bash 中使用 tr
命令、IFS
、read
命令、参数扩展和 cut
命令在分隔符上拆分字符串。
在 Bash 中使用 tr
命令拆分字符串
tr
命令是 translate
的缩写形式。它从标准输入中翻译、删除和压缩字符,并将结果写入标准输出。
这是在命令行或 bash 脚本中操作文本的有用命令。可以去除重复字符,小写转大写,替换字符。
在下面的 bash 脚本中,echo
命令通过管道将字符串变量 $addrs
传送到 tr
命令,该命令在分隔符 -
上拆分字符串变量。一旦字符串被拆分,这些值就会分配给 IP
变量。
然后,for
循环遍历 $IP
变量并使用 echo
命令打印出所有值。
#!/usr/bin/env bash
addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"
IP=$(echo $addrs | tr "-" "\n")
for ip in $IP
do
echo "$ip"
done
下面的输出显示 $addr
字符串变量已在分隔符 -
上拆分为 4 个单独的字符串。
192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4
在 Bash 中使用 IFS
拆分字符串
IFS
代表内部字段分隔符。
IFS
用于扩展后的单词拆分,并使用内置的 read
命令将行拆分为单词。IFS
的值告诉 shell 如何识别单词边界。
IFS
的默认值是一个空格、一个制表符和一个新行。在下面的脚本中,IFS
的原始值已存储在 OIFS
变量中,而新的 IFS
值已设置为 -
。
这意味着 shell 应该将 -
作为新词的边界。shell 在 -
上拆分字符串变量 addrs
,并将新值分配给 ips
变量。
然后,for
循环遍历 $ips
变量并使用 echo
命令打印出所有值。
IFS=$OIFS
用于恢复 IFS
变量的原始值,并且 unset OIFS
告诉 shell 从它跟踪的变量列表中删除变量 OIFS
。
#!/usr/bin/env bash
addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"
OIFS=$IFS
IFS='-'
ips=$addrs
for ip in $ips
do
echo "$ip"
done
IFS=$OIFS
unset OIFS
下面的输出显示 $addr
字符串变量已在分隔符 -
上拆分为 4 个单独的字符串。
192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4
在 Bash 中使用 read
命令拆分字符串
read
命令是 Linux 系统上的内置命令。
它用于将一行的内容读入变量。它还拆分分配给 shell 变量的字符串的单词。
变量 $addrs
字符串被传递给下面脚本中的 read
命令。IFS
设置作为字符串变量的单词边界的分隔符。
这意味着 -
在我们的例子中是单词边界。-a
选项告诉 read
命令将已拆分的单词存储到数组中,而 -r
选项告诉 read
命令按原样处理任何转义字符而不解释它们。
已拆分的单词存储在 IP
数组中。for
循环遍历 $IP
数组并使用 echo
命令打印出所有值。
#!/usr/bin/env bash
addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"
IFS='-' read -ra IP <<< "$addrs"
for ip in "${IP[@]}";
do
echo "$ip"
done
从下面的输出中,我们可以观察到 $addr
字符串变量已在分隔符 -
上拆分为单独的 4 个字符串。
192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4
在 Bash 中使用参数扩展拆分字符串
下面的脚本使用参数扩展来搜索和替换字符。用于参数扩展的语法是 ${variable//search/replace}
。这将搜索与 variable
中的 search
匹配的模式,并将其替换为 replace
。
在我们的例子中,脚本搜索模式 -
并将其替换为空白。${addrs//-/ }
周围的括号用于定义新字符串的数组,称为 ip_array
。
我们使用 for
循环遍历所有 ip_array
变量元素并使用 echo
命令显示它们。
#!/usr/bin/env bash
addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"
ip_array=(${addrs//-/ })
for ip in "${ip_array[@]}"
do
echo "$ip"
done
下面的输出显示了 ip_array
中的所有元素。
192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4
我们可以通过传入索引来访问 ip_array
变量的各个元素。在下面的脚本中,我们传递了索引 0
来引用数组中的第一个元素。
#!/usr/bin/env bash
addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"
ip_array=(${addrs//-/ })
printf "${ip_array[0]}\n"
输出显示 ip_array
的第一个元素。
192.168.8.1
在 Bash 中使用 cut
命令拆分字符串
下面的脚本使用 cut
命令来提取子字符串。-d
选项指定用于将字符串划分为字段的分隔符,而 -f
选项设置要提取的字段的编号。
但是在我们的例子中,字符串使用 -
作为分隔符进行分割,为了访问第一个字段,我们将参数 1
传递给 -f
选项,我们执行相同的操作来访问第二个字段将 2
传递给 -f
选项。
这些值分别分配给 ip_one
和 ip_two
变量。printf
命令用于显示变量的值。
#!/usr/bin/env bash
addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"
ip_one=$(echo $addrs | cut -d '-' -f 1)
ip_two=$(echo $addrs | cut -d '-' -f 2)
printf "$ip_one\n$ip_two\n"
下面的输出显示从 $addrs
字符串变量拆分的第一个和第二个字符串。
192.168.8.1
192.168.8.2
相关文章
如何在 CentOS 中获取 IP 地址
发布时间:2023/05/04 浏览次数:108 分类:操作系统
-
这篇简短的文章是对 CentOS 的一个简短介绍,然后简要讨论了我们如何使用命令行界面 (CLI) 在 CentOS 中获取服务器 IP 地址。
在 Linux 中更新 YUM
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。
在 Linux 中安装 Deb 文件
发布时间:2023/05/04 浏览次数:130 分类:操作系统
-
本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。
Linux 中的 lsof 命令
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。
Linux 解决不能执行二进制文件问题
发布时间:2023/05/04 浏览次数:187 分类:操作系统
-
在本文中,我们将学习如何在 Linux 中执行二进制文件。 如果 Linux 无法执行二进制文件,我们还将学习如何解决错误。
Linux 中错误 Mesg: Ttyname Failed: Inappropriate Ioctl for Device Error
发布时间:2023/05/04 浏览次数:145 分类:操作系统
-
本文介绍如何在 Linux 中解决 mesg: ttyname failed: inappropriate ioctl for device 错误。在 Linux 中,这个错误是由于默认的 vagrant 配置 config.ssh.shell 与 bash -l 交互导致的。
Linux 中的 ps aux 命令
发布时间:2023/05/04 浏览次数:69 分类:操作系统
-
本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。
Linux 中的 NTP
发布时间:2023/05/04 浏览次数:137 分类:操作系统
-
本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。
在 Bash 中创建进度条
发布时间:2023/05/04 浏览次数:164 分类:操作系统
-
这是有关在 Bash 中创建进度条以显示正在运行的命令或进程的进度的指南。本文将探讨在 Bash(Linux 和 macOS 的默认 shell)中向 shell 脚本添加进度条的几种方法。使用 pv 命令在 Bash 中创建进度条