![sed를 사용하여 패턴에서 한 사례를 뺀 각 발생을 바꾸는 방법은 무엇입니까?](https://linux55.com/image/168874/sed%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%A8%ED%84%B4%EC%97%90%EC%84%9C%20%ED%95%9C%20%EC%82%AC%EB%A1%80%EB%A5%BC%20%EB%BA%80%20%EA%B0%81%20%EB%B0%9C%EC%83%9D%EC%9D%84%20%EB%B0%94%EA%BE%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
cron 작업을 통해 30분마다 임시 파일이 생성되어 다음 출력이 생성됩니다.
---- kind=<data> field=<value> humankind=<data> kind=<data> field=<value> humankind=<data> kind=<data> field=<value> humankind=<data>
다음과 같이 포맷하고 싶습니다.
---- kind=<data> field=<value> humankind=<data>
kind=<data> field=<value> humankind=<data>
kind=<data> field=<value> humankind=<data>
나는 다음 sed 표현식을 시도했습니다.
sed -r 's|\s(kind=)|\n\1|g' /path/to/file
그러나 출력은 다음과 같습니다.
---- <------ The first line should be here
kind=<data> field=<value> humankind=<data>
kind=<data> field=<value> humankind=<data>
kind=<data> field=<value> humankind=<data>
다음 표현을 사용하세요.
sed -r 's|[^-]{4} (kind=)|\n\1|g' /path/to/file
원하는 출력을 생성하지만 이상하게 동작합니다.
---- kind=<data> field=<value> humankind=<incomplete data>
kind=<data> field=<value> humankind=<incomplete data>
kind=<data> field=<value> humankind=<incomplete data>
어떤 이유로든 마지막 필드(sed 표현식에 사용된 패턴의 일부가 포함되어 있음)는 "불완전한 데이터"의 처음 두 문자만 인쇄합니다.
내가 뭘 잘못했나요?
답변1
문제는 sed -r 's|\s(kind=)|\n\1|g' /path/to/file
모든 "종류"(첫 번째 항목 포함)에 대해 새 줄을 삽입하여 뒤에 추가 줄 바꿈을 얻는다는 것입니다 ----
. 대신 시도해 보세요.
sed -E 's|\s(kind=)|\n\1|2g' /path/to/file
첫 번째 게임을 건너뛰기 때문입니다.
두 번째는 데이터의 일부인 "kind" 앞의 4개 문자와 일치하기 때문에 실패합니다(길이는 6자여야 함)!