Sed 正则表达式打印到 file.txt

Sed 正则表达式打印到 file.txt

我已连接到 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 "}"

相关内容