종종 매우 긴 줄이있는 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
이후에 자동으로 실행되도록하여 래핑을 비활성화 한 다음 다시 활성화합니다.