如何在6个连续反斜杠后字符间插入空格,sed正则执行报错如何解决
报错原因
你编写的sed正则存在两个核心问题:
- 反斜杠转义混乱:
\在sed正则中属于转义字符,要匹配字面量的\必须写成\\,你写的转义序列不符合语法规则,导致正则引擎把\{识别为重复计数元字符的开头,但后续没有合法的计数格式,触发了invalid repetition count(s)报错。 - 逻辑不匹配:你写的正则只能匹配转义字符,没有覆盖到后续需要加空格的普通字符的处理逻辑。
实现方案
方案1:GNU sed 实现(多数Linux发行版默认预装)
sed -E 's/(\\\\\\\\\\\\)([^\\]+)(\\\\+)/echo "\1$(echo "\2" | sed '\''s/./& /g'\'')\3"/ge' 目标文件名
执行逻辑:
- 先把每行拆分为三段:开头的6个连续
\、中间需要加空格的字符段、结尾的连续\ - 单独处理中间字符段,给每一个字符后加一个空格,再和前后段拼接输出
如果需要直接修改原文件,在命令中加入-i参数即可。
方案2:Awk 实现(跨平台兼容性更好)
awk -F'\\\\\\\\\\\\' '{ mid = $2 new_mid = "" for(i=1;i<=length(mid);i++){ c = substr(mid,i,1) if(c != "\\"){ new_mid = new_mid c " " }else{ new_mid = new_mid substr(mid,i) break } } print $1 "\\\\\\\\" new_mid }' 目标文件名
执行后重定向输出到新文件即可得到转换后的结果。
内容的提问来源于stack exchange,提问作者Ziggy1209
相关产品推荐
相关产品推荐

