Bash脚本只留下文件上的数字,星号和哈希值?

时间:2014-12-15 17:45:05

标签: regex bash

所以我正在开发一个项目,我需要从串口读取输出并将其存储在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

1 个答案:

答案 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

也就是说,不仅仅是删除换行符,还要删除不是数字,星号或八进制的所有内容。