Bash 颜色字符编码删除


GREEN='33[0;32m'
NC='33[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

如果我删除 ${GREEN} 和 ${NC},则会显示"#### 相同"。

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

如何删除绿色编码部分?

您可以使用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

这解决了

GREEN='33[0;32m'
NC='33[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

最新更新