Shell中如何仅当字符串首尾为{和}时移除这两个字符?
解决方法
你的问题有两个核心原因:一是原sed命令的结尾替换没考虑行尾可能存在的空白字符(比如换行、空格),导致匹配不到末尾的};二是如果要严格遵循「仅当首字符为{且尾字符为}时才移除」的规则,需要先做行匹配再执行替换。
方案1:严格匹配首尾条件后移除字符
这个方案完全符合你的需求——只有当文件第一行同时以{开头、}结尾时,才移除这两个字符:
$(head -n 1 "$filePath" | sed '/^{.*}$/ {s/^{//; s/}$//}')
说明:/^{.*}$/先筛选出符合首尾条件的行,再对该行执行两个替换操作:删除开头的{,删除结尾的}。
方案2:分别处理首尾(兼容行尾空白)
如果你的需求是「首字符是{就删开头,尾字符是}就删结尾」,不管另一个条件是否满足,同时兼容行尾可能存在的空白字符,可以用这个命令:
$(head -n 1 "$filePath" | sed 's/^{//; s/}[[:space:]]*$//')
说明:s/}[[:space:]]*$//会匹配行尾的}以及后面的任意空白字符(包括换行、空格、制表符),确保能正确删除末尾的}。
内容的提问来源于stack exchange,提问作者INeedHelp101
相关产品推荐
相关产品推荐

