sed
일부 표현식에 따라 필터 매칭 라인을 만들 수 있지만 일치하지 않는 라인은 인쇄하지 않고 무시할 수 있습니까?
실제 예로, scalac
파일 세트에서 (Scala 컴파일러) 를 실행 하고 -verbose
생성 된 .class
파일을 출력에서 읽고 싶습니다 . scalac -verbose
많은 메시지를 출력하지만 우리는 형식의 메시지에만 관심이 [wrote some-class-name.class]
있습니다. 내가 현재하고있는 것은 이것이다 ( |&
bash 4.0의 stderr를 다음 프로그램으로 파이프하는 방법입니다).
$ scalac -verbose some-file.scala ... |& sed 's/^\[wrote \(.*\.class\)\]$/\1/'
이렇게하면 우리가 관심있는 메시지에서 파일 이름이 추출되지만 다른 모든 메시지도 변경되지 않은 상태로 전달됩니다! 물론 다음과 같이 할 수 있습니다.
$ scalac -verbose some-file.scala ... |& grep '^\[wrote .*\.class\]$' |
sed 's/^\[wrote \(.*\.class\)\]$/\1/'
작동하지만 실제 문제를 해결하는 것과 매우 유사 sed
합니다. 입력에서 일치하지 않는 행을 무시 하도록 지시하는 방법 입니다. 그럼 어떻게할까요?