如何修正sed命令,移除JSON中的Dipesan pada\r\n字符串?
解决sed无法移除JSON中
Dipesan pada\r\n字符串的问题 我明白你遇到的困扰——明明写了sed替换命令,却没法把Dipesan pada\r\n去掉只留日期。问题出在转义字符的处理逻辑和sed的工作方式上,我来帮你拆解并修正:
先搞清楚文件里的实际内容
首先你需要确认JSON文件里的\\r\\n是字面的字符(也就是文件里真的写着Dipesan pada\\r\\n),还是JSON转义后的实际回车+换行符(打开文件能看到Dipesan pada后面换了一行才是日期)。可以用cat -A file.json查看:
- 如果看到
Dipesan pada\\r\\n,说明是字面的反斜杠+r+反斜杠+n - 如果看到
Dipesan pada^M$(^M是回车符,$是换行符),说明是实际的换行和回车
针对两种情况的修正命令
情况1:文件里是字面的Dipesan pada\\r\\n
因为sed里的反斜杠需要转义,文件里的每个\在sed正则里要写成\\,所以原字符串里的\\r\\n需要写成\\\\\\\\r\\\\\\\\n(每个\转义一次,两个\就变成四个)。修正后的命令:
sed 's/Dipesan pada \\\\\\\\r\\\\\\\\n //g' file.json
(注意末尾的空格也要匹配,因为日期前面有个空格)
情况2:文件里是实际的回车+换行符
不同版本的sed处理换行/回车的方式略有不同:
- GNU sed(Linux系统):直接用
\r\n匹配回车+换行:sed 's/Dipesan pada \r\n //g' file.json - BSD sed(macOS系统):需要用
$'...'让shell解析转义字符,或者用十六进制表示:# 方法1:用shell解析转义 sed $'s/Dipesan pada \\r\\n //g' file.json # 方法2:用十六进制字符(\x0D是回车,\x0A是换行) sed 's/Dipesan pada \x0D\x0A //g' file.json
验证效果
执行命令后,你可以用grep "createdAt" file.json(或者直接查看文件),应该能看到"createdAt": "17 Mei 2018"这样的结果,只剩下日期部分了。
另外提一句,你的JSON里有多个重复的orderInfo_203759231000键,这在JSON语法里是不规范的(重复键会被解析器忽略或覆盖),如果后续要处理这个JSON,建议先修复键的唯一性问题哦。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

