![추가 줄바꿈 없이 grep을 사용하여 일치하는 부분만 얻는 방법](https://linux55.com/image/123204/%EC%B6%94%EA%B0%80%20%EC%A4%84%EB%B0%94%EA%BF%88%20%EC%97%86%EC%9D%B4%20grep%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%EB%B6%80%EB%B6%84%EB%A7%8C%20%EC%96%BB%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
주어진 정규식과 일치하는 각 줄의 부분을 가져오고 개행을 도입하지 않고 일치하는 부분만 출력하기 위해 일종의 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 구분 기호를 사용하여 연결할 수 있습니다.