MQTT 스트림에 연결하고 다음을 입력하여 데이터를 필터링했습니다.
mosquitto_sub -d -t +/# 2>&1 |
sed -n "/PUBLISH/{s|.*\('.*',\).*|\1$(date),|;N;s/\n//;p}"
우분투 터미널을 입력하십시오. 이는 내가 관심을 갖는 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 regex를 조사했고 그 예는 유형이 다음과 같은 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 "}"