Linux Bash脚本中如何按索引删除字符串变量的第n个字符?
按精确索引删除Bash字符串中的字符
Bash原生支持字符串切片操作,完全可以不用tr这类工具实现按索引删除字符,以下是两种实用方案:
方案1:Bash原生参数展开(推荐)
利用Bash的字符串切片语法${var:start:length},将原字符串拆分为目标索引前的部分和目标索引后的部分,拼接后得到删除指定字符后的结果。
注意:Bash中字符串索引默认是0-based(从0开始计数),如果你的需求是按1-based(从1开始计数)的位置删除,需要先转换为0-based索引。
示例(删除1-based第5个字符):
var="hello world" # 1-based第5个字符对应0-based索引为4 target_idx=4 new_var="${var:0:target_idx}${var:target_idx+1}" echo "$new_var" # 输出:hell world
如果需要直接传入1-based位置:
var="hello world" pos=5 # 1-based位置 target_idx=$((pos - 1)) new_var="${var:0:target_idx}${var:target_idx+1}" echo "$new_var"
方案2:使用sed工具实现
若偏好使用文本处理工具,可通过sed的正则匹配定位并删除指定位置的字符:
示例(删除1-based第5个字符):
var="hello world" pos=5 new_var=$(echo "$var" | sed "s/^\(.\{$(($pos-1))\)./\1/") echo "$new_var" # 输出:hell world
解释:正则^\(.\{4\}\).匹配字符串开头的4个字符,随后匹配第5个字符,替换时只保留前4个字符,等同于删除第5个字符。
内容的提问来源于stack exchange,提问作者王米尔
相关产品推荐
相关产品推荐

