欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

macos shell 把 字符串 "AB-11111111" 先移除掉左右空格,,,再判断 是不是 以 "AB-" 开头,,,如果是的话,,就移除掉 AB-

在 macOS 的 shell 中,你可以使用以下命令来处理字符串 "AB-11111111":先移除左右空格,再判断是否以 "AB-" 开头,如果是的话就移除 "AB-"。# OK 有大用

bash    
str="  AB-11111111  " trimmed=$(echo "$str" | xargs)  # 移除左右空格 if [[ "$trimmed" == AB-* ]]; then    result=${trimmed#AB-}       # 移除开头的 "AB-" else    result="$trimmed" fi echo "$result"                  # 输出结果: 11111111    


分解步骤说明:

  1. 移除左右空格

  • 使用 xargs 或 ${var// /} 来移除空格,这里 xargs 是简单有效的方法。

  • 也可以使用 awk '{$1=$1};1' 或 sed 's/^[[:space:]]*//;s/[[:space:]]*$//'

  • 检查是否以 "AB-" 开头

    • [[ "$trimmed" == AB-* ]] 是 Bash 的模式匹配语法,判断字符串是否以 AB- 开头。

  • 移除 "AB-"(如果匹配)

    • ${var#AB-} 是参数扩展语法,表示从变量 $var 开头移除 AB-

    简化写法(单行命令):

    bash    
    str="  AB-11111111  "; echo "${$(echo "$str" | xargs)#AB-}"    


    (注意:${var#prefix} 是纯 Bash 功能,如果你在严格 POSIX shell 中,可能需要 echo "$str" | sed 's/^AB-//' 替代)

    输出结果:

    11111111
    


    这样就能得到移除 AB- 后的结果。如果需要进一步操作数字部分(如提取、计算等),可以继续扩展逻辑。



    trimmed=$(echo "$gh" | xargs) 详解

    在 macOS 或 Linux 的 shell(如 bash 或 zsh)中,以下命令用于移除变量中的 首尾空格

    bash
    trimmed=$(echo "$gh" | xargs)

    详解:

    1. echo "$gh"

    • 打印变量 $gh 的值(含可能的前后空格)。

  • | xargs

    • xargs 是一个命令行工具,默认行为是:

    • 当没有额外参数时(如 xargs 不加命令),它仅执行 trim 操作。

    1. 去除输入字符串的首尾空格(类似于 trim())。

    2. 如果输入有多行,会将它们合并为一行(并用空格分隔)。

    3. 如果输入为空,则输出也为空。

  • trimmed=$(...)

    • 将处理后的结果(去除空格后的字符串)赋值给变量 trimmed


    示例:

    bash
    gh="   Hello World   " trimmed=$(echo "$gh" | xargs) echo "原字符串: '$gh'"     # 原字符串: '   Hello World   ' echo "去除空格后: '$trimmed'"  # 去除空格后: 'Hello World'

    注意事项:

    1. xargs 的副作用

    • 如果 $gh 包含换行符或多行文本,xargs 会默认合并为一行(用空格分隔)。

    • 如果仅需 trim 而不合并行,可以用其他方法(如 sed/awk)。

  • 替代方法(更安全,推荐)

    bash
    trimmed=$(echo "$gh" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
    • sed 直接删除首尾空白字符(包括空格、制表符等)。


    总结:

    • trimmed=$(echo "$gh" | xargs) 适合简单场景,能去除首尾空格。

    • 如果字符串可能含换行符或复杂空格,建议用 sed 或 ${var%% }(Bash 原生字符串操作)。



    普通分类: