이는 예를 들어 설명하는 것이 더 쉬울 것입니다. 이것은 내 입력 파일입니다.
file1:
x
x
a
b
c
x
x
file2:
x
x
c
b
a
x
x
file3:
x
x
x x a b c x x
x
x
file4:
x
x
x x c b a x x
x
x
file5:
x
x
a b
x
x
file6:
x
x
x x b c x x
x
x
file7:
x
x
x x b b x x
x
x
a
regexp AND 를 사용하여 파일을 검색하고 싶습니다 c
. 그러면 파일 1-4가 반환됩니다.
ag -C <number> --pager="less -R" regexp
출력이 출력 에 최대한 가깝게 보이도록 하고 싶습니다 . 다음은 다음과 같습니다(색상 강조 표시를 위해 결과를 꺾쇠 괄호로 묶었습니다).
file1:
2: x
3: <a>
4: b
5: <c>
6: x
file2:
2: x
3: <c>
4: b
5: <a>
6: x
file3:
2: x
3: x x <a> b <c> x x
4: x
file4:
2: x
3: x x <c> b <a> x x
4: x
아니면 ag
다음과 같이 인쇄할 수도 있습니다.
file1:
2: x
3: <a>
4: b
--
4: b
5: <c>
6: x
확실하지는 않지만 그 세부 사항은 나에게 중요하지 않습니다. 이것이 하는 일:
- 가장 밝은 부분
- 위 파일의 상대 경로
- 이러한 기능은
less
탐색 및 검색을 제공합니다. - 여러 정규 표현식을 찾을 수 있으며 함께 찾을 수도 있습니다.
- 옵션
-C
이 여전히 명령줄에 존재합니다.
줄 번호는 좋지만 필수는 아닙니다.
나는 많은 것을 시도했고 이것이 내가 얻은 가장 가까운 것입니다:
1단계: 각 정규식에 대한 파일 목록을 미리 컴파일합니다.
for x in $array_of_regexp_file_names;
do r=${x/.txt/} ; # remove .txt from the end
ag -il $r | sort > $x & ; # sort the list of FILES with this single regexp
done
이는 파일 이름별로 정렬된 각 정규식에 대한 파일 목록을 제공합니다.
2단계: ag를 사용하여 2개 이상의 파일 목록이 교차하는 부분 검색
아래에서 분해하겠습니다.
ag -C 1 --pager="less -R" "regexp1|regexp2" $(comm -12 regexp1.txt regexp2.txt)
$(comm -12 regexp1.txt regexp2.txt)
이 명령은 다음을 찾습니다.교차로두 개의 파일 목록. 이 사진의 빨간색은 다음과 같습니다.
ag -C 1 --pager="less -R" "regexp1|regexp2" ...
ag
여기에 정규 표현식을 제공했습니다.알다해당 교차점의 모든 파일에 존재합니다. 중복된 것처럼 보일 수도 있지만 출력에서 단어가 강조 표시되기를 원하기 때문에 이렇게 합니다. 그것은 내 삶을 1000배 더 쉽게 만듭니다.
문제는 교차점에 많은 파일이 있고 명령을 실행하면 다음과 같은 출력이 제공된다는 것입니다.
zsh: argument list too long: ag
그 외에는 내 해결 방법이 작동합니다. 다음과 같은 명령을 실행하여 이를 테스트했습니다.
ag -C 1 --pager="less -R" "regexp1|regexp2" $(comm -12 patter1.txt regexp2.txt | head -10)
문제는 교차 목록이 너무 길어 명령줄에 맞지 않는다는 것입니다. 검색할 파일 목록을 전달하는 옵션이 제공 되면 이 옵션을 건너뛸 수 있지만 ag
해당 기능이 없습니다.
어쨌든, 그럴 필요가 없기를 바랍니다. 이 문제에 대한 더 간단한 해결책이 있다고 가정하고 있는데, 그것이 무엇인지 모르겠습니다.
편집: 일부 강조 규칙을 강화하기 위해 다음과 같은 몇 가지 추가 예가 있습니다.
실시예 1
정규식:
regex1 = a.
regex2 = .b
입력하다
file8:
x
x
abc
x
x
산출:
2: x
3: <ab>c
4: x
실시예 2
정규식:
regex1 = foo
regex2 = oba
입력하다
file9:
x
x
foobar
x
x
산출:
2: x
3: <foo>bar
4: x
grep과 ag가 이미 이 작업을 수행했기 때문에 이 출력을 선택했지만 두 경우 모두에 대해 매우 양면적이므로 이러한 예제를 구현하기 어려운 경우 일반적으로 이러한 극단적인 경우에서 상황이 다르게 작동하는지 강조해도 괜찮습니다.내 거정규식은 겹치지 않습니다.