스트림 편집 도구: 캡처된 콘텐츠 출력

스트림 편집 도구: 캡처된 콘텐츠 출력

grep, cut, sed, awk, perl 등의 다른 스트림 편집 및 텍스트 처리/조작 도구를 사용할 때 이것이 가능한지 궁금합니다. 출력의 반대(즉, 명령을 실행할 때 추출되지 않은 내용)를 일반적인 방식으로 출력(파일 또는 STDOUT 형식으로)할 수 있는 방법이 있습니까? 도구 기능과 선택적 로고를 완성합니다.

예를 들어:

그러면 정규식과 일치하는 파일의 행이 인쇄됩니다.

sed '/regexp/!d

그러면 정규식과 일치하지 않는 파일의 행이 인쇄됩니다.

sed '/regexp/d'

sed 옵션을 사용하지 않고 일반적인 접근 방식을 사용한 다음 awk 또는 grep 명령에 적용하여 이러한 명령 중 하나를 실행하고 어딘가에 STDOUT 없이 데이터를 출력할 수도 있습니까?

이와 같은 작업을 수행하고 conn을 사용하여 sed 명령을 파일로 출력한 다음 원본 파일을 출력 파일과 비교하고 차이점을 출력할 수 있습니다. 다음과 같은 것입니다(구문이 올바르지 않다고 확신하지만 논리가 달성 가능하기를 바랍니다).

comm <(sort originalFile) <(sort sedProcessedFile) > originalFileMinussedProcessedFile

원천

그러나 sed뿐만 아니라 모든 종류의 텍스트/스트림 조작 도구 또는 최소한 awk 및 Perl용입니다.

답변1

이에 대한 일반적인 접근 방식은 없습니다. 필터는 스트림을 읽고 쓰기만 하며 스트림을 내부에서 수정하지 않으며 필터 간의 관계는 완전히 임의적이며 특정 도구에 따라 다릅니다. 따라서 일반 메커니즘은 입력에서 무언가가 "제거"되었다는 사실을 알 수 없으므로 출력에 복사하기 위해 저장할 수 없습니다.

awk그러나 및 같은 도구는 perl임의의 파일 자체에 쓸 수 있으므로 명시적인 코드를 사용하여 이를 수행할 수 있습니다.

awk '/regexp/ { print } !/regexp/ { print > "non-matching.txt" }' > matching.txt

관련 정보