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

Shell中如何仅当字符串首尾为{和}时移除这两个字符?

解决方法

你的问题有两个核心原因:一是原sed命令的结尾替换没考虑行尾可能存在的空白字符(比如换行、空格),导致匹配不到末尾的};二是如果要严格遵循「仅当首字符为{且尾字符为}时才移除」的规则,需要先做行匹配再执行替换。

方案1:严格匹配首尾条件后移除字符

这个方案完全符合你的需求——只有当文件第一行同时以{开头、}结尾时,才移除这两个字符:

$(head -n 1 "$filePath" | sed '/^{.*}$/ {s/^{//; s/}$//}')

说明:/^{.*}$/先筛选出符合首尾条件的行,再对该行执行两个替换操作:删除开头的{,删除结尾的}。

方案2:分别处理首尾(兼容行尾空白)

如果你的需求是「首字符是{就删开头,尾字符是}就删结尾」,不管另一个条件是否满足,同时兼容行尾可能存在的空白字符,可以用这个命令:

$(head -n 1 "$filePath" | sed 's/^{//; s/}[[:space:]]*$//')

说明:s/}[[:space:]]*$//会匹配行尾的}以及后面的任意空白字符(包括换行、空格、制表符),确保能正确删除末尾的}。

内容的提问来源于stack exchange,提问作者INeedHelp101

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:18:29