[grep] grep 또는 ack에서 반환 된 긴 일치 줄을 자르는 방법

종종 매우 긴 줄이있는 HTML 파일에서 ack 또는 grep을 실행하고 싶습니다. 반복적으로 줄 바꿈되는 매우 긴 선을보고 싶지 않습니다. 그러나 정규 표현식과 일치하는 문자열을 둘러싸는 긴 줄 부분 만보고 싶습니다. Unix 도구의 조합을 사용하여 어떻게 얻을 수 있습니까?



답변

grep 옵션을 사용할 수 있으며, -o패턴을 변경하여 ".{0,10}<original pattern>.{0,10}"주변의 컨텍스트를 볼 수 있습니다.

       -o,-만 일치
              PATTERN과 일치하는 행의 일부만 표시합니다.

.. 또는 -c:

       -c, --count
              정상 출력을 억제합니다. 대신 일치하는 줄 수를 인쇄하십시오.
              각 입력 파일에 대해. -v, --invert-match 옵션을 사용하면
              아래), 일치하지 않는 줄을 계산합니다.


답변

을 통해 결과를 파이프하십시오 cut. 또한 80 개의 열만 얻을 --cut수 있도록 스위치를 추가하는 것도 고려 중 --cut=80입니다.


답변

ack 및 chop 긴 줄을위한 호출기로 less를 사용할 수 있습니다. ack --pager="less -S" 이렇게하면 긴 줄이 유지되지만 줄 바꿈 대신 한 줄에 남습니다. 선을 더 많이 보려면 화살표 키를 사용하여 왼쪽 / 오른쪽으로 스크롤하십시오.

이 작업을 수행하기 위해 ack에 대한 다음 별칭 설정이 있습니다.

alias ick='ack -i --pager="less -R -S"'


답변

cut -c 1-100

1에서 100까지의 문자를 가져옵니다.


답변

출처 : http://www.topbug.net/blog/2016/08/18/truncate-long-matching-lines-of-grep-a-solution-that-preserves-color/

제안 된 접근 방식 ".{0,10}<original pattern>.{0,10}"은 강조 색상이 종종 엉망이된다는 점을 제외하면 완벽하게 좋습니다. 유사한 출력으로 스크립트를 만들었지 만 색상도 유지됩니다.

#!/bin/bash

# Usage:
#   grepl PATTERN [FILE]

# how many characters around the searching keyword should be shown?
context_length=10

# What is the length of the control character for the color before and after the
# matching string?
# This is mostly determined by the environmental variable GREP_COLORS.
control_length_before=$(($(echo a | grep --color=always a | cut -d a -f '1' | wc -c)-1))
control_length_after=$(($(echo a | grep --color=always a | cut -d a -f '2' | wc -c)-1))

grep -E --color=always "$1" $2 |
grep --color=none -oE \
    ".{0,$(($control_length_before + $context_length))}$1.{0,$(($control_length_after + $context_length))}"

스크립트가 저장됩니다 가정 grepl한 후, grepl pattern file_with_long_lines일치하는 행을 표시하지만 일치하는 문자열 약 10 문자로한다.


답변

내가하는 일은 다음과 같습니다.

function grep () {
  tput rmam;
  command grep "$@";
  tput smam;
}

내 .bash_profile에서 grep을 재정 의하여tput rmam 이전과 tput smam이후에 자동으로 실행되도록하여 래핑을 비활성화 한 다음 다시 활성화합니다.


답변

여기에 이미지 설명 입력

를 사용할 수없는 비정상적인 상황에서는 다음을 사용할 -E수 있습니다.

grep -oe ".\{0,10\}error.\{0,10\}" mylogfile.txt