Bash处理字符串系列函数(一)
2023-04-18 12:35:51 时间
文章目录
修剪字符串的前导和尾随空格
这是sed
、awk
、perl
和其他工具的替代品。下面的函数通过查找所有前导和尾随空格并将其从字符串的开头和结尾移除来工作。
内置的:
用来代替临时变量。
示例函数:
trim_string() {
# Usage: trim_string " example string "
: "${1#"${1%%[![:space:]]*}"}"
: "${_%"${_##*[![:space:]]}"}"
printf '%s
' "$_"
}
示例用法:
$ trim_string " Hello, World "
Hello, World
$ name=" John Black "
$ trim_string "$name"
John Black
修剪字符串中的所有空白并截断空格
这是sed
、awk
、perl
和其他工具的替代品。下面的函数通过滥用分词来创建一个没有前导/尾随空格和截断空格的新字符串。
示例函数:
# shellcheck disable=SC2086,SC2048
trim_all() {
# Usage: trim_all " example string "
set -f
set -- $*
printf '%s
' "$*"
set +f
}
示例用法:
$ trim_all " Hello, World "
Hello, World
$ name=" John Black is my name. "
$ trim_all "$name"
John Black is my name.
在字符串上使用regex
bash
正则表达式匹配的结果可以用于替换大量用例中的sed
。
警告: 这是为数不多的依赖于平台的bash
特性之一。
bash
将使用用户系统上安装的任何regex引擎。
如果以兼容性为目标,请坚持使用POSIX正则表达式特性。
警告: 本例仅打印第一个匹配组。当使用多个捕获组时,需要进行一些修改。
示例函数:
regex() {
# Usage: regex "string" "regex"
[[ $1 =~ $2 ]] && printf '%s
' "${BASH_REMATCH[1]}"
}
示例用法:
$ # Trim leading white-space.
$ regex ' hello' '^s*(.*)'
hello
$ # Validate a hex color.
$ regex "#FFFFFF" '^(#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3}))$'
#FFFFFF
$ # Validate a hex color (invalid).
$ regex "red" '^(#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3}))$'
# no output (invalid)
脚本中的用法示例:
is_hex_color() {
if [[ $1 =~ ^(#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3}))$ ]]; then
printf '%s
' "${BASH_REMATCH[1]}"
else
printf '%s
' "error: $1 is an invalid color."
return 1
fi
}
read -r color
is_hex_color "$color" || color="#FFFFFF"
# Do stuff.
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击