如何准确提取Cloud Foundry中cups.sh的服务名与-p参数?
解决CUPS命令脚本解析问题
你的问题出在使用cut按空格分割字段——因为-p后面的JSON参数本身包含空格,cut会把它拆成多个独立字段,导致提取不完整。下面给你两种可靠的提取方法,能准确获取服务名和完整的参数内容:
方法1:使用awk分割(简单直观)
利用awk指定-p 作为分隔符,直接提取-p后面的全部内容,不管里面有没有空格:
File=cups.sh # 先过滤注释和空行 sed -e 's/[[:space:]]*#.*// ; /^[[:space:]]*$/d' "$File" | while read -r line do # 提取服务名:cf cups 后的第一个非空格字符串 service_name=$(echo "$line" | awk '{print $3}') # 提取-p后面的所有内容 params=$(echo "$line" | awk -F "-p " '{print $2}') # 输出结果(可根据需求调整处理逻辑) echo "服务名称: $service_name" echo "参数内容: $params" echo "------------------------" done
方法2:使用sed正则匹配(更精准)
通过正则表达式直接捕获服务名和参数部分,适合格式固定的cf cups命令:
File=cups.sh sed -e 's/[[:space:]]*#.*// ; /^[[:space:]]*$/d' "$File" | while read -r line do # 捕获cf cups后的服务名(非空格字符) service_name=$(echo "$line" | sed -E 's/^cf cups ([^ ]+).*/\1/') # 捕获-p后面的所有内容 params=$(echo "$line" | sed -E 's/^cf cups [^ ]+ -p (.*)/\1/') echo "服务名称: $service_name" echo "参数内容: $params" echo "------------------------" done
关键注意点
- 用
read -r替代普通read,避免脚本意外转义参数中的特殊字符(比如JSON里的引号) - 两种方法都先通过
sed过滤了注释行和空行,确保只处理有效命令行
内容的提问来源于stack exchange,提问作者B.T Anand
相关产品推荐
相关产品推荐

