You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 08:19:59