grep 출력을 색상이있는 파일로 저장


36

grep 명령의 결과를 파일로 저장해야하지만 출력 파일의 형식을 지정하고 터미널에서와 같이 색상을 유지하려고합니다.

그렇게 할 수있는 방법이 있습니까? grep을 일종의 마크 업 언어로 저장할 수 있습니까? 가능하지 않은 경우이 작업을 수행 할 수있는 다른 도구가 있습니까?

터미널에서와 마찬가지로 검색 키워드를 출력 파일에서 두드러지게 만들려고합니다.

답변:


42

마크 업을 유지하려면 텍스트 파일 이상이 필요합니다. 색상을 유지하기 위해 HTML 출력을 사용합니다.

  • 설치 아하 예에의 "의 변환 ANSI 이스케이프 시퀀스 HTML 코드에 유닉스 터미널을 "

    sudo apt-get install aha
  • 그런 다음 grep(또는 ls) 출력을 다음과 같이 저장하십시오 .

    ls --color=always | aha --black --title 'ls-with-colors' > ls-with-colors.html

    옵션 :

    --black param to set background as black color
    --title param to set the title for HTML page
    

다음을 통한 파일 확장자의 구문 강조 pygmentize

  • 설치 pygmentize:

    sudo apt-get install python-pygments
  • 그런 다음 이런 종류의 명령을 실행하십시오.

    pygmentize file.pl | grep -i --color=always version | aha --black > ls-with-colors.html

여기에 이미지 설명을 입력하십시오


1
아하!! , aha 는 정말 훌륭한 도구입니다. 정확히 내가 찾던 것입니다, 감사합니다 !!
전능 한 낙타 Moha

2
@ Mhd.Tahawi : 코드 색상을 유지할 수 있도록 답변을 업데이트했지만 pygmentize다른 경우에는 작동합니다.
Sylvain Pineau

10

출력 파일로 수행하려는 작업에 따라 색상은 일부 특수 문자에서 가져 오기 때문에 일반 텍스트 파일에 색상을 추가 할 수 있습니다. Grep은 파일로 리디렉션 할 때 인쇄하지 않으려는 것이므로 다음과 같이 강제로 설정해야합니다.

grep --color=always "stuff" input.txt > output.txt

이제 파일을 콘솔에 인쇄하면 Bash가 해당 문자를 "이 색상 사용"으로 해석하기 때문에 색상으로 인쇄됩니다.

cat output.txt

그러나와 같은 편집기에서 열면 vim이상한 문자가 표시됩니다. 예를 들어, 명령을 사용할 때

echo "A sentence. A red sentence. Another sentence." \
  | grep --color=always "A red sentence" > output.txt

출력은 내가 사용하여 인쇄 할 때 바로 보이는 cat내가 그것을 열 때하지만 vim내가 얻을

A sentence. ^[[01;31m^[[KA red sentence^[[m^[[K. Another sentence.

따라서 편집기를 사용하려면 이것이 원하는 것이 아닐 것입니다.


맞습니다!, 나는 그 사이에 이상한 상징을 가지고 있었고 그 것이 무엇인지 이해하지 못했습니다.
전능 한 낙타 Moha

나는 당신의 대답이 얼마나 간단하고 효과적인지 정말 좋아합니다. 그냥 출력 고양이 :). 이것은 단기적으로 좋습니다 (지금 당장 나에게 충분합니다).
Trevor Boyd Smith

세부 사항 : bash가 아닌 터미널 (에뮬레이터)이며 색상 이스케이프 시퀀스 (일명 이상한 문자) 를 해석합니다 .
masterxilo

2

올바르게 이해했다면 터미널 출력을 텍스트 파일로 저장하고 싶습니까? 그러나 색상으로 서식을 지정하려고합니다. 이 경우 내 아이디어는 다음과 같습니다.

자동으로 출력 강조

알다시피, grep 출력을 텍스트 파일로 캡처하면 텍스트 파일이기 때문에 형식을 지정할 수 없습니다. 내가 아는 한 쉬운 방법으로는 할 수 없습니다.

그럼에도 불구하고 어떤 종류의 파일이 열려 있는지 텍스트 편집기를 구현하도록 구성된 간단한 해결 방법이 있습니다. 예를 들어, grep 출력에 bash 구성 요소가 있으므로 bash 강조 표시가 작동한다고 가정 해 봅시다 (단지 터미널의 컬러 출력에 표시되는 색상 임). 트릭은 텍스트 출력을 적절한 확장자로 파일에 저장하는 것입니다. 다음과 같은 일을하는 대신 :

ls | grep something > output

당신은 갈 수 있습니다

ls | grep something > output.sh

gedit (또는 괜찮은 텍스트 편집기)는 bash 코드에 대해 이야기하고 있음을 자동으로 인식하고 그에 따라 강조 표시합니다. 출력에 색상을 지정할 필요는 없습니다. 프로그램은 열려있는 코드 유형을 인식하면 자동으로 출력합니다. 다른 형식의 형식으로 작업하는 경우 확장하려는 내용에 맞게 확장 기능을 조정하십시오 (예 :> output.xml,> output.html,> output.py ... etc). 행운을 빕니다! :)

출력 파일에서 일부 단어 강조

내가 찾은 경우 검색 한 단어를 강조 표시하려고합니다. 다시 말하지만, 일반 텍스트이기 때문에 일반 텍스트 파일에서 수행 할 수 없습니다. 그러나 일부 HTML 코딩 사용과 같은 매우 쉬운 방법으로 형식을 추가 할 수 있습니다. 이것은 출력을 html 코드로 변환하고 html을 해석 할 수있는 프로그램 (libreoffice writer, firefox 및 10000 등)으로 열면 일부 단어가 강조 표시됩니다.

그렇게하려면, 이것이 당신의 grep이고 html로 내보내 졌다고 가정 해 봅시다 :

ls | grep keytext > output.html

이제 출력에서 키 텍스트 를 강조 표시 하려고 합니다. sed 를 사용 하여 다음과 같이 할 수 있습니다 .

sed -i 's/keytext/<font color="red">keytext<\/font>/g' output.html

그리고 violà, 이제 키 텍스트가 빨간색으로 강조 표시됩니다.


1
좋은 생각 !! 그러나 구문 강조를 찾고 있지 않습니다. 검색 키워드의 색상을 다른 색상 (일반적으로 빨간색)으로 어떻게 grep하는지 알고 있습니다. 출력 파일에서 키워드를 두드러지게 유지하고 싶습니다.
전능 한 낙타 Moha

좋아, 당신은 색깔을 가진 무언가를 욕하고 있습니까? HTML 코드처럼? 입력에 색상이 표시되면 형식을 지정해야하므로 "fontcolor : red"와 같이 어딘가에 코딩해야합니까? 이 경우 grep에 형식 코드를 포함시켜야 할 수도 있습니다. :)
Rho

좋아, 질문의 편집으로 그것을 얻습니다. :) 어떤 출력 확장을 사용하고 있습니까?
Rho

나는 perl 확장을 사용할 때 완전한 구문 색상을 얻었고 변수 이름을 greping하여 심지어 색상이 지정되지 않았으므로 perl 코드를 grepping하고 있습니다.
전능 한 낙타 Moha
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.