如何检查字符串是否包含特定的十六进制值

时间:2017-05-30 10:09:27

标签: string bash

我遇到BASH脚本问题

我有一个变量,它在curl命令中填充了一个字符串,这个字符串通常是两个带空格的单词。空格不是\ x20而是十六进制的\ x0A,这会产生回车,我想反击。

我无法控制返回的字符串,因为它从Google获取数据

是否有一种简单的方法来检查字符串变量是否包含\ x0A十六进制? 是否可以操作字符串,将\ x0A值更改为\ x20

提前致谢;)

2 个答案:

答案 0 :(得分:1)

您可以使用bash的内置参数扩展将所有空格转换为普通空格:

a=$' a\rb\nc'
$ echo "$a"
ba
c
$ a="${a//[[:space:]]/ }"

在其他shell上,您可以使用tr执行相同操作,但代价是调用外部进程并创建子shell:

$ a=$(printf '%s' "$a" | tr '[:space:]' ' ')

在任何一种情况下,结果都是:

$ echo "$a"
 a b c

答案 1 :(得分:0)

  

是否有一种简单的方法来检查字符串变量是否包含\ x0A十六进制?是否可以操作字符串,将\ x0A值更改为\ x20

是的,是的。

正如Tom建议的那样,您可以使用bash中的参数扩展或任何shell中的tr来操作字符串。

如果您首先要检查字符串是否包含特殊字符,bash的内置测试功能将完成此任务。

$ s=$'a\rb\r'; [[ $s == *$'\n'* ]] && echo "Yes"
$ s=$'a\rb\n'; [[ $s == *$'\n'* ]] && echo "Yes"
Yes