추가 줄바꿈 없이 grep을 사용하여 일치하는 부분만 얻는 방법

추가 줄바꿈 없이 grep을 사용하여 일치하는 부분만 얻는 방법

주어진 정규식과 일치하는 각 줄의 부분을 가져오고 개행을 도입하지 않고 일치하는 부분만 출력하기 위해 일종의 grep 명령으로 파이프하려는 명령의 출력이 있습니다.

매우 유사한 작업을 수행하는 것이 가능하다는 것을 알고 있지만 grep -o일치하는 항목마다 줄 바꿈이 생성되고 명령의 출력에도 많은 새 줄이 포함됩니다.

예:

입력하다(내 명령의 출력):

banana apple banana
apple bananas banned

정규식:

ban[a-z]*

출력은 다음과 같이 주어진다.grep -o:

banana
banana
bananas
banned

예상 출력:

bananabanana
bananasbanned

내가 생각할 수 있는 한 가지는 tr개행 문자를 명령 출력에 나타날 가능성이 없는 일부 문자로 바꾸는 데 사용하고 출력을 에 공급한 grep -o다음 tr개행 문자를 다시 가져오는 데 사용하는 것입니다.

mycommand|tr '\n' @|grep -o regex|tr -d '\n'|tr @ '\n'

하지만 더 나은 해결책이 있어야 한다고 생각합니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변1

사용해도 괜찮다면 다음을 사용하세요 perl.

mycommand | perl -lne 'print join "", /ban[a-z]*/g'

각 줄의 일치 항목은 목록 컨텍스트로 반환되며, null 구분 기호를 사용하여 연결할 수 있습니다.

관련 정보