여러 파일을 일치시킬 때 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 {} ";"

관련 정보