如何在ksh中截取字符串以提取完整的SELECT语句?
提取变量中的完整SELECT语句方法
问题原因
你之前用StringArf=$(echo ${StringArf} | cut -d' ' -f3)失败的原因有两个:
- 未用双引号包裹
${StringArf},导致变量里的换行被转换成空格,原本的多行内容变成一堆空格分隔的字段; cut -d' ' -f3仅截取第3个空格分隔的字段,自然只能拿到"select"。
可行方法
以下几种方式可以正确提取完整的SELECT语句:
方法1:用grep匹配开头行
如果SELECT语句单独一行且以select开头,直接匹配这一行:
SELECT_STMT=$(echo "$StringArf" | grep -E '^select') echo "$SELECT_STMT"
必须用双引号包裹$StringArf,否则会丢失换行符,导致grep无法匹配到单独的行。
方法2:用sed提取从select到结尾的内容
如果SELECT语句可能跨多行,用sed提取从包含select的行开始到文本末尾的所有内容:
SELECT_STMT=$(echo "$StringArf" | sed -n '/^select/,$p') echo "$SELECT_STMT"
方法3:用awk提取目标行
awk可以精准匹配并输出目标行:
SELECT_STMT=$(echo "$StringArf" | awk '/^select/{print}') echo "$SELECT_STMT"
方法4:Bash参数扩展(单行SELECT场景)
如果确认SELECT语句是变量的最后一行,也可以用Bash内置的参数扩展直接截取:
SELECT_STMT="${StringArf##*$'\n'}" echo "$SELECT_STMT"
这个写法会去掉变量中最后一个换行符之前的所有内容,仅保留最后一行。
内容的提问来源于stack exchange,提问作者prathu
相关产品推荐
相关产品推荐

