【问题标题】:How to check for whitespace characters using sed or grep in shell script?如何在 shell 脚本中使用 sed 或 grep 检查空格字符?
【发布时间】:2018-04-05 18:30:53
【问题描述】:

我试过了,但它不起作用。

if [ $char -eq " " -o $char -eq "" -o $char -eq "   " ]

【问题讨论】:

标签: linux bash shell


【解决方案1】:

-eq 用于数字。此外,您应该将变量括在引号中,例如“$char”,而不是 $char

#! /bin/sh

A=1
B=" "

if [ "$A" -eq 1 ]; then
    echo "eq is for numeric"
fi

if [ "$B" = " " ]; then
    echo "= is for characters"
fi

【讨论】:

    【解决方案2】:

    这适用于单字符变量 $char,但请注意,该帖子主要假设多字符变量。

    用途:

    if grep -q '\s' <<< "$char"; then ...

    【讨论】:

      【解决方案3】:

      -eq 对于数值,对于字符串,使用 ==

      if [[ $char == " " || -z $char || $char == "   " ]]; then
      
      • -z 等效""
      • ||等效 -o

      最近 bash 的正则表达式替代(0 或 1 个空格或 3 个空格):

      if [[ $char =~ ^\ {0,1}$ || $char =~ ^\ {3}$ ]] ; then
      
      • \ : 空格
      • [[:blank:]]:空格,制表符
      • [[:space:]]:空格、制表符、换行符、垂直制表符、换页、回车
      • 如果要匹配0到3个空格:if [[ $char =~ ^\ {0,3}$ ]] ; then

      【讨论】:

        【解决方案4】:

        在 bash 中,您可以在 [[]] 中使用正则表达式匹配

        if  [[ $char =~ [[:space:]] ]]
        

        如果你真的想匹配单个空白字符

        if  [[ $char =~ ^[[:space:]]$ ]]
        

        或者一个空格或者什么都没有

        if  [[ $char =~ ^[[:space:]]?$ ]]
        

        或者字符串中只有空格

        if  [[ $char =~ ^[[:space:]]+$ ]]
        

        或者只有空格或者什么都没有

        if  [[ $char =~ ^[[:space:]]*$ ]]
        

        【讨论】:

        • char='a a' matches...
        • @kyodev 为什么不呢?
        • @kyodev 不确定您的意思?
        • @kyodev 问题要求空格,[[:space:]] 是空格的字符类。请注意,问题中的代码正是 OP 尝试过的,不一定正是他们想要的。
        猜你喜欢
        • 2022-01-12
        • 2017-12-03
        • 2016-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-04
        • 2023-03-16
        • 2022-11-30
        相关资源
        最近更新 更多