如何用Bash替换反斜杠、转义换行符并生成合法JSON
问题1:如何在Bash中全局将文本文件里的反斜杠替换为双反斜杠?
直接使用sed命令即可完成全局替换,命令如下:
sed -i 's/\\/\\\\/g' 目标文件名.txt
-i参数表示直接修改原文件;若不需要修改原文件,可去掉-i,将结果重定向到新文件:sed 's/\\/\\\\/g' 原文件名.txt > 新文件名.txts/\\/\\\\/g是核心替换规则:\\用于匹配原文件中的单个反斜杠(sed中反斜杠需转义)\\\\表示替换为两个反斜杠(每个反斜杠都需要转义)g代表全局替换,会处理文件中所有匹配到的反斜杠
问题2:将文件换行符替换为
\\n并生成合法JSON 你的现有脚本未处理换行符的替换逻辑,以下是两种修正后的实现方案:
方案一:用Bash参数扩展处理
#!/bin/bash # 读取文件内容到变量,保留原始换行符 expected_output=$(<file.txt) # 将换行符替换为JSON标准的换行转义符\\n expected_output=${expected_output//$'\n'/\\n} # 将原文件中的反斜杠替换为JSON标准的反斜杠转义符\\\\ expected_output=${expected_output//\\/\\\\} # 格式化输出为指定JSON格式 JSON_FMT='{"output":"%s"}' printf "$JSON_FMT\n" "$expected_output" >> aaa.txt
方案二:用sed命令批量处理
#!/bin/bash # 用sed一次性完成反斜杠转义和换行符替换 processed_content=$(sed -e 's/\\/\\\\/g' -e ':a;N;$!ba;s/\n/\\n/g' file.txt) # 格式化输出为指定JSON格式 JSON_FMT='{"output":"%s"}' printf "$JSON_FMT\n" "$processed_content" >> aaa.txt
sed的第二个命令:a;N;$!ba;s/\n/\\n/g作用是:先将文件所有内容合并到同一处理空间,再把所有换行符统一替换为\\n
两种方案最终都会生成符合要求的合法JSON:
{"output":"Hello\\nmate"}
内容的提问来源于stack exchange,提问作者Raaz
相关产品推荐
相关产品推荐

