前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Bash处理字符串系列函数(一)

Bash处理字符串系列函数(一)

原创
作者头像
程序员小涛
修改2021-02-20 14:48:32
8240
修改2021-02-20 14:48:32
举报
文章被收录于专栏:涛的程序人生涛的程序人生

@TOC

修剪字符串的前导和尾随空格

这是sedawkperl和其他工具的替代品。下面的函数通过查找所有前导和尾随空格并将其从字符串的开头和结尾移除来工作。

内置的用来代替临时变量。

示例函数:

代码语言:txt
复制
trim_string() {
    # Usage: trim_string "   example   string    "
    : "${1#"${1%%[![:space:]]*}"}"
    : "${_%"${_##*[![:space:]]}"}"
    printf '%s\n' "$_"
}

示例用法:

代码语言:txt
复制
$ trim_string "    Hello,  World    "
Hello,  World

$ name="   John Black  "
$ trim_string "$name"
John Black

修剪字符串中的所有空白并截断空格

这是sedawkperl和其他工具的替代品。下面的函数通过滥用分词来创建一个没有前导/尾随空格和截断空格的新字符串。

示例函数:

代码语言:txt
复制
# shellcheck disable=SC2086,SC2048
trim_all() {
    # Usage: trim_all "   example   string    "
    set -f
    set -- $*
    printf '%s\n' "$*"
    set +f
}

示例用法:

代码语言:txt
复制
$ 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正则表达式特性。

警告: 本例仅打印第一个匹配组。当使用多个捕获组时,需要进行一些修改。

示例函数:

代码语言:txt
复制
regex() {
    # Usage: regex "string" "regex"
    [[ $1 =~ $2 ]] && printf '%s\n' "${BASH_REMATCH[1]}"
}

示例用法:

代码语言:txt
复制
$ # 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)

脚本中的用法示例:

代码语言:txt
复制
is_hex_color() {
    if [[ $1 =~ ^(#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3}))$ ]]; then
        printf '%s\n' "${BASH_REMATCH[1]}"
    else
        printf '%s\n' "error: $1 is an invalid color."
        return 1
    fi
}

read -r color
is_hex_color "$color" || color="#FFFFFF"

# Do stuff.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 修剪字符串的前导和尾随空格
  • 修剪字符串中的所有空白并截断空格
  • 在字符串上使用regex
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档