주어진 정규식과 일치하는 각 줄의 부분을 가져오고 개행을 도입하지 않고 일치하는 부분만 출력하기 위해 일종의 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 구분 기호를 사용하여 연결할 수 있습니다.