Solaris下Ksh Shell中删除字符串末尾反斜杠\的方法
解决Solaris Ksh环境中字符串末尾反斜杠的移除问题
场景与问题
在Solaris系统的Ksh Shell环境中,执行以下命令提取字符串:
var=$(sed -n 's/username=\(.*\)/\1/p' security/boot.properties); echo '$var'
实际输出:
{AES}BjW32/nnL0m78BJ/ZOEoVzXmEWzVBVZx+8Q\=
期望输出(移除末尾的\):
{AES}BjW32/nnL0m78ef5G5B5tBJ/ZOEoVzXmEWzVBVZx+8Q=
已尝试但无效的方法
var=$(sed -n 's/username=\(.*\)/\1/p' security/boot.properties); echo "${var%/\}"var=$(sed -n 's/username=\(.*\)/\1/p' security/boot.properties); echo "${var%/\}" | sed 's/\\$//'var=$(sed -n 's/username=\(.*\)/\1/p' security/boot.properties); echo "${var%/\}" | sed 's/\\=$//'var=$(sed -n 's/username=\(.*\)/\1/p' security/boot.properties); echo "${var%/\}" | awk '{gsub(/\\$/,"")}1'var=$(sed -n 's/username=\(.*\)/\1/p' security/boot.properties); echo "${var%/\}" | rev | cut -c 2- | rev
可行解决方案
方案1:sed提取时直接处理
修改sed命令,提取阶段就完成反斜杠移除,一步到位:
var=$(sed -n 's/username=\(.*\)\\=/\1=/p' security/boot.properties) echo "$var"
逻辑:匹配username=后的内容,将末尾的\=直接替换为=,直接得到目标字符串。
方案2:Ksh参数扩展处理
保留原sed提取逻辑,用Ksh原生参数扩展精准移除末尾反斜杠:
var=$(sed -n 's/username=\(.*\)/\1/p' security/boot.properties) echo "${var%\\}"
逻辑:${var%\\}表示从变量var末尾删除最短匹配的单个反斜杠,双反斜杠是Ksh中对特殊字符的转义写法。
方案3:tr命令过滤(仅限单反斜杠场景)
如果确认字符串中只有末尾这一个反斜杠,可直接用tr删除所有反斜杠:
var=$(sed -n 's/username=\(.*\)/\1/p' security/boot.properties) echo "$var" | tr -d '\\'
注意:此方法会删除字符串内所有反斜杠,仅适用于目标字符串无其他反斜杠的场景。
内容的提问来源于stack exchange,提问作者Ashar
相关产品推荐
相关产品推荐

