我已连接到 MQTT 流,并通过输入以下内容来过滤数据:
mosquitto_sub -d -t +/# 2>&1 |
sed -n "/PUBLISH/{s|.*\('.*',\).*|\1$(date),|;N;s/\n//;p}"
进入 Ubuntu 终端。这会打印 MQTT 流中我唯一感兴趣的内容。
现在我可以做到这一点,我想将这些信息转储到文件中qwerty.TXT
。我试过了
mosquitto_sub -d -t +/# 2>&1 |
sed -n "/PUBLISH/{s|.*\('.*',\).*|\1$(date),|;N;s/\n//;w qwerty.txt}"
并得到以下错误:
sed: -e expression #1, char 0: unmatched '{'
我研究了 sed 正则表达式,示例是w file.type
写入文件file.type
,其中类型可以是.txt
例如。
我也尝试过
mosquitto_sub -d -t +/# 2>&1 |
sed -n "/PUBLISH/{s|.*\('.*',\).*|\1$(date),|;N;s/\n//;p >> qwerty.txt}"
和
mosquitto_sub -d -t +/# 2>&1 |
sed -n "/PUBLISH/{s|.*\('.*',\).*|\1$(date),|;N;s/\n//;1a qwerty.txt}"
如何将过滤后的 MQTT 流打印到名为 的文件中qwerty.txt
?
答案1
要终止w
中的命令sed
,您需要行尾或字符串尾。
您可以在命令中嵌入文字换行符sed
(这对于交互式使用来说相当烦人),也可以使用多个-e
命令。
所以而不是:
sed -n "/PUBLISH/{s|.*\('.*',\).*|\1$(date),|;N;s/\n//;w qwerty.txt}"
你会使用:
sed -n -e "/PUBLISH/{s|.*\('.*',\).*|\1$(date),|;N;s/\n//;w qwerty.txt" -e "}"