【问题标题】:Bash color Character encoding Removal [duplicate]Bash颜色字符编码删除[重复]
【发布时间】:2020-02-17 17:03:47
【问题描述】:
GREEN='\033[0;32m'
NC='\033[0m' # No Color

rimip2=$(echo -e "${GREEN}222b:b33c:3401:2341:88c2:85d7:5cf6:6a01${NC}" | grep "222b:b33c:3401:2341:88c2:85d7:5cf6:6a01")  

 if [[ "${rimip2}" == "222b:b33c:3401:2341:88c2:85d7:5cf6:6a01" ]]; then
     echo "#### Same"
 else
   echo "#### Different"
 fi

尽管 echo ${rimip2} 的可见显示值为 222b:b33c:3401:2341:88c2:85d7:5cf6:6a01,但此代码始终打印“#### Different”

如果我删除 ${GREEN} 和 ${NC},则会显示“#### Same”。

这是复杂代码的简化部分。 所以我的目标是保持绿色打印,然后grepping那条我将用于ssh的行。但是现在我不能将它用于 SSH,直到它等于字符串值“222b:b33c:3401:2341:88c2:85d7:5cf6:6a01”

grep行后如何去掉绿色编码部分?

【问题讨论】:

  • 尝试用一些字符串替换来撕掉颜色代码。
  • 17998978 的副本。

标签: linux bash shell


【解决方案1】:

您可以使用grep -o 仅打印与表达式匹配的部分,这样任何颜色代码的存在都不再有影响:

rimip2=$(echo -e "${GREEN}222b:b33c:3401:2341:88c2:85d7:5cf6:6a01${NC}" | grep -o "222b:b33c:3401:2341:88c2:85d7:5cf6:6a01")

你也可以直接使用grep的退出状态,至少在这个简化的情况下:

 if echo -e "${GREEN}222b:b33c:3401:2341:88c2:85d7:5cf6:6a01${NC}" | grep "222b:b33c:3401:2341:88c2:85d7:5cf6:6a01" >/dev/null; then
     echo "#### Same"
 else
   echo "#### Different"
 fi

【讨论】:

  • grep 有一个静默模式,如果你只想要-q的状态
  • 在这个例子中,-q 就可以了。但是如果您还想处理错误,则不能使用它,因为它也会以状态码 0 退出,以防出错。见:stackoverflow.com/questions/4749330/…
【解决方案2】:

成功了

GREEN='\033[0;32m'
NC='\033[0m' # No Color
    rimip2=$(echo -e "${GREEN}240b:c01c:221:2341:88c2:85d7:5cf6:6a01${NC}" | grep "240b:c01c:221:2341:88c2:85d7:5cf6:6a01" | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g")  

     if [[ "${rimip2}" == "240b:c01c:221:2341:88c2:85d7:5cf6:6a01" ]]; then
         echo "#### Same"
     else
       echo "#### Different"
     fi

【讨论】:

    猜你喜欢
    • 2015-11-16
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 2016-07-21
    • 2017-06-20
    相关资源
    最近更新 更多