여러 파일을 일치시킬 때 grep의 출력 형식 지정

여러 파일을 일치시킬 때 grep의 출력 형식 지정

여러 파일을 검색할 때 grep의 출력은 다음과 같습니다.

{FILE}:{MATCH}

해당 부분을 두 번 클릭하면 적어도 해당 항목과 일치하는 항목 중 일부 {FILE}도 선택(및 복사)하므로 이는 문제가 됩니다. :대신 grep이 출력 형식을 다음과 같이 지정하도록 하려면 어떻게 해야 합니까?

{FILE} : {MATCH}

기본적으로 열 앞에 공백을 삽입하고 싶습니다. (그리고 선택적으로 그 이후에 하나)

답변1

grep -T7/8 동안 작동합니다.

% for f in a ab abc abcd abcde abcdef abcdefg abcdefgh; do echo pattern > $f; done
% grep -T pattern *
a      :pattern
ab     :pattern
abc    :pattern
abcd   :pattern
abcde  :pattern
abcdef :pattern
abcdefg:pattern
abcdefgh       :pattern

로부터GNU grep 매뉴얼:

-T --initial-tab

탭 정렬이 정상적으로 보이도록 실제 줄 내용의 첫 번째 문자가 탭 정지에 있는지 확인하세요. 이는 출력 앞에 실제 내용을 추가하는 옵션( , 및 )에 -H유용 -n합니다 -b. 단일 파일의 줄이 모두 동일한 열에서 시작될 확률을 높이기 위해 줄 번호와 바이트 오프셋(있는 경우)이 최소 크기 필드 너비로 인쇄됩니다.

답변2

grep내가 아는 한 이것은 그 자체로는 이루어질 수 없습니다 . 파일 이름 :에 이 포함되어 있지 않다고 가정합니다.

grep ... | sed 's/:/ : /'

첫 번째만 :패딩됩니다.

물론 grep파일 이름만 인쇄하도록 지정할 수도 있습니다.

grep -l ...

답변3

무엇을 구성하는가?단어두 번 클릭을 통한 선택은 터미널(및/또는 X 툴킷)에 따라 다르며 일부 터미널의 경우 사용자 정의할 수 있습니다.

을 위한 xterm,캐릭터가 정리되어 있어요클래스(문자, 공백...) 및 두 번 클릭하면 동일한 클래스의 인접한 문자가 선택됩니다.

기본값이 설명되어 있습니다.거기. 해당 기본값은 :다음과 같습니다 .~ 아니다/문자나 숫자와 같은 클래스가 아닌 그 자체와 같은 클래스에 있습니다 .

일부 시스템에서는 다음을 제공하여 기본값을 변경합니다.리소스 파일처럼 .xterm/etc/X11/app-defaults/XTerm

Linux Mint 시스템에는 다음이 있습니다.

! Here is a pattern that is useful for double-clicking on a URL:
*charClass: 33:48,35:48,37-38:48,43-47:48,58:48,61:48,63-64:48,95:48,126:48

이는 문자 58( :)과 47을 문자 및 숫자(48)와 동일한 클래스에 넣습니다.

당신이 할 수 있는 일은 :당신의 리소스 파일을 통해 자신의 클래스에 남겨두도록 변경하는 것입니다.

예를 들어, 다음을 추가하면:

XTerm*charClass: 33:48,35:48,37-38:48,43-47:48,61:48,63-64:48,95:48,126:48

로 이동 ~/".Xdefaults-$(uname -n)"한 다음 파일 이름을 두 번 클릭하면 에서 중지됩니다 :.

다음을 사용해 실험해 볼 수 있습니다.

xterm -cc 33:48,35:48,37-38:48,43-47:48,61:48,63-64:48,95:48,126:48

세 번 또는 네 번 클릭할 때 정규식으로 다른 선택 방법을 정의할 수도 있습니다. 예를 들어

XTerm*on3Clicks: regex [^:]+

콜론이 아닌 문자의 시퀀스를 선택합니다.세 번 클릭.

답변4

grep이는 각 입력 파일에 대해 새 프로세스를 생성하므로 매우 비효율적이지만 다음 과 같습니다.

파일 목록(예: *)이 주어지면 다음을 수행하십시오.

f에 대한파일 목록
하다
    grep --label="$f " --with-파일 이름무늬< "$f"
완료

--label=string실제로 "표준 입력을 읽을 때 입력 파일 이름이 string."  인 것처럼 가정합니다. --with-filename( -H줄여서) "각 일치 항목의 파일 이름을 인쇄하세요."라고 말합니다. 검색할 파일이 두 개 이상인 경우 기본값입니다. IMNSHO, 지정할 때 기본적으로 켜져 있어야 --label하지만 그런 식으로 작동하지 않는 것 같습니다. 내 코드(위)는 에 대한 인수의 파일 이름에 공백을 추가하므로 --label다음과 같은 출력을 얻습니다.

파일 이름:라인 매칭 패턴

파일 이름이 에서 오는 경우 find다음을 수행하십시오.

찾다(경로…) (표현)-exec sh -c 'grep --label="$1 " -H무늬< "$1"' sh {} ";"

관련 정보