如何在Shell脚本中使用sed或grep检查空白字符?代码问题求助
在Shell脚本中检查空白字符:修复你的代码+sed/grep用法
嘿,我来帮你搞定Shell脚本里检查空白字符的问题~咱先说说你原来写的代码为啥不行,再给你讲讲用sed、grep还有正确的if判断怎么实现。
你的原代码问题分析
你写的if [ $char -eq " " -o $char -eq "" -o $char -eq " " ]有几个明显的问题:
-eq是数值比较符,专门用来比整数的,字符串比较得用=或者==(bash支持==,POSIX标准shell用=就行)- 变量
$char没加引号!如果它是空字符串,脚本会变成[ -eq " " ... ],直接报语法错误,必须写成"$char" - 你重复检查了两次空格,还漏了其他常见空白字符,比如制表符(
\t)、换行符(\n)这些
正确的if判断方式
如果只是判断单个字符是不是空白(包括空格、制表符等所有空白类字符),可以这么写:
方式1:逐个判断指定空白符
char=" " # 这里可以换成你要检查的字符 if [ "$char" = " " ] || [ "$char" = $'\t' ]; then echo "这个字符是空白字符(空格或制表符)" fi
方式2:用正则匹配(bash支持)
用POSIX正则里的[[:space:]]可以匹配所有空白类字符(空格、制表符、换行、换页等),更省心:
char=$'\t' # 比如这里是制表符 if [[ "$char" =~ ^[[:space:]]$ ]]; then echo "这个字符是空白字符" fi
用grep检查空白字符
如果要批量检查变量内容或者文件里的空白字符,grep是个好帮手:
检查变量是否包含空白字符
my_var="hello world" # 用grep的-q选项(静默模式,只返回状态码) if echo "$my_var" | grep -q "[[:space:]]"; then echo "变量里包含空白字符" fi
检查文件中的空白字符
- 匹配所有包含空白字符的行:
grep "[[:space:]]" your_file.txt
- 匹配全是空白字符的行(包括空行):
grep "^[[:space:]]*$" your_file.txt
用sed处理/检查空白字符
sed可以用来替换、筛选包含空白字符的内容:
替换所有空白字符为标记(方便可视化)
sed 's/[[:space:]]/■/g' your_file.txt
只输出包含空白字符的行
sed -n '/[[:space:]]/p' your_file.txt
检查变量中的空白字符
my_var="test with tab" # 这里有制表符 # 如果有输出,说明变量包含空白字符 echo "$my_var" | sed -n '/[[:space:]]/p'
内容的提问来源于stack exchange,提问作者Norbert László
相关产品推荐
相关产品推荐

