所以我正在开发一个项目,我需要从串口读取输出并将其存储在JSON格式的文件中。这已经完成了:
#!/bin/bash
while :
do
echo '{"content": "' > /home/pi/bticino/assets/bash/lastCommands.json
cat /home/pi/bticino/assets/bash/serialContent.json >> ./lastCommands.json
echo '"}' >> /home/pi/bticino/assets/bash/lastCommands.json
cat /home/pi/bticino/assets/bash/lastCommands.json |tr -d "\n" > /home/pi/bticino/assets/bash/serialF.json
sleep 5
done
问题来自有时(随机),奇怪的字符开始出现在我的输出文件(serialContent.json和serialF.json)上。发生这种情况时,JSON解析器会失败。
在该文件中,我只需要存储0-9位数,*' s和#' s。有没有办法用正则表达式实现这一目标?
这是我需要保留在文件中的内容:
*# 1 ## # 1 ## # 1 ## # 1 ## #< EM> 1 ## # 1 ## # 1 ## #* 13 * 198564874 * 1 * ## *# 1 ## < / EM># 1 ## # 1 ## # 1 ## # 1 ## #* 1 ##
感谢您的回答@William Pursell,我不得不稍微修改我的脚本,因此它不会修剪我的json语法(我忘了提及),结果如下:
#!/bin/bash
dir=/home/pi/bticino/assets/bash
while :
do
echo '{"content": "' > $dir/lastCommands.json
< $dir/serialContent.json tr -dc '[:digit:]*#' >> $dir/lastCommands.json
echo '"}' >> $dir/lastCommands.json
cat $dir/lastCommands.json |tr -d "\n" > $dir/serialF.json
sleep 5
done
答案 0 :(得分:2)
扩展您对tr
的使用,并摆脱UUOC:
替换:
cat /home/pi/bticino/assets/bash/lastCommands.json |tr -d "\n" > /home/pi/bticino/assets/bash/serialF.json
与
dir=/home/pi/bticino/assets/bash
< $dir/lastCommands.json tr -dc '[:digit:]*#' > $dir/serialF.json
也就是说,不仅仅是删除换行符,还要删除不是数字,星号或八进制的所有内容。