如何用sed替换除\N外的单个反斜杠为双反斜杠?
解决sed替换单个反斜杠但保留\N的问题
要实现替换所有单个反斜杠\为\\,但保留\N不变的需求,你可以通过两种思路处理,避免全局替换误改\N中的反斜杠:
方法1:使用GNU sed的负向预查(推荐,简洁)
GNU sed支持扩展正则表达式的负向预查,直接匹配"后面不跟N的反斜杠"进行替换:
sed -E 's/\\(?!N)/\\\\/g' 你的输入文件
-E:启用扩展正则,避免过多转义\\(?!N):匹配反斜杠\,且该反斜杠后面不是字符N- 替换为
\\\\(即最终输出的\\,因为sed里反斜杠需要双重转义)
方法2:兼容POSIX sed的临时占位法(无环境限制)
如果你的sed版本不支持扩展正则,可通过三步临时替换规避:
sed 's/\\N/###TEMP###/g; s/\\/\\\\/g; s/###TEMP###/\\N/g' 你的输入文件
- 先把所有
\N替换为一个唯一的临时标记(比如###TEMP###,确保不会和文本中其他内容冲突) - 全局替换所有剩余的反斜杠为
\\ - 把临时标记换回
\N
验证示例
针对你提供的输入:
aa \N aa \N aa aa aa aa \N \N \N aa \N aa \N aa \N \N \N \N \N aa aa aa \N bb \N \ aa
执行上述任意命令后,输出将和你期望的一致:
aa \N aa \N aa aa aa aa \N \N \N aa \N aa \N aa \N \N \N \N \N aa aa aa \N bb \N \\ aa
内容的提问来源于stack exchange,提问作者Nir
相关产品推荐
相关产品推荐

