Sed 정규식을 file.txt로 인쇄합니다.

Sed 정규식을 file.txt로 인쇄합니다.

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 "}"

관련 정보