정규식을 가지고 놀면서 배워보세요. errsort, pytest.py 등 다른 파일과 일치하는 이유는 무엇입니까? 다른 두 파일과 일치하도록 두 번째 줄 끝에 물음표를 추가합니다. 또한 grep 기본 표현식을 사용해 보았습니다.
감사해요!
$ ls -x | egrep -i "(aa)(dd)?(cc)?(dd)?((bb(ccdd)?(bb)?)?)|(ccdd)"
aa aaaa aabb aabbaa aabbbb aabbccdd aabbccddcc
aabbddbb
aaccaa aaccdd aaddaa aaddccddccdd aaddee errsort pytest.py TEST
$ ls -x | egrep -i "(aa)(dd)?(cc)?(dd)?((bb(ccdd)?(bb)?)?)|(ccdd)?"
aa aaaa aabb aabbaa aabbbb aabbccdd aabbccddcc aabbddbb
aaccaa aaccdd aaddaa aaddccddccdd aaddee errsort pytest.py TEST
test.sh vimtest
$ bash --version
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
$ grep --version
grep (GNU grep) 3.7
$ ls | egrep -i "(aa)(dd)?(cc)?(dd)?((bb(ccdd)?(bb)?)?)|(ccdd)" 아 아아아아 아부 아바 아부 aabbccdd aabbccddCC 아부DDBB 아카아 야가드 아다 추가ccddccdd 다음에 추가이 $ ls -x | egrep -i "(aa)(dd)?(cc)?(dd)?((bb(ccdd)?(bb)?)?)|(ccdd)?" 아 아아아아 아부 아바 아부 aabbccdd aabbccddCC 아부DDBB 아카아 야가드 아다 추가ccddccdd 다음에 추가ee pytest.py 테스트 정렬 오류 vimtest.sh 테스트 $ ls | egrep -i "(aa)(dd)?(cc)?(dd)?((bb(ccdd)?(bb)?)?)|(ccdd)?" 아 아아아아 아부 아바 아부 aabbccdd aabbccddCC 아부DDBB 아카아 야가드 아다 추가ccddccdd 다음에 추가이 잘못된 정렬 pytest.py 시험 테스트 파일 Wim 테스트 $
$ ls | egrep -io "(aa)(dd)?(cc)?(dd)?((bb(ccdd)?(bb)?)?)|(ccdd)?" 아 아 아 아부 아부 아 아부 aabbccdd aabbccdd 아부 아랍 에미리트 아 야가드 다음에 추가 아 addccdd ccdd 다음에 추가
이것은 색상을 제공하지 않지만 내 화면의 굵은 글씨는 패턴 일치라고 생각되는 것을 나타 내기 위해 빨간색입니다.
하단 파일에는 빨간색이 없습니다.
-x를 제거하면 첫 번째 출력에 영향을 미칩니다. -o 도움이 많이 됐어요!
답변1
선택적 매칭은 (ccdd)?
바로 선택 사항입니다.
일치하는 텍스트는 다음과 같습니다.비어 있는, 그러나 이것은 여전히 일치, 일치가 있는 줄입니다.
$ ls -x
aa aaaa aabb aabbaa aabbbb aabbccdd aabbccddcc aabbddbb aaccaa aaccdd aaddaa aaddccddccdd aaddee
errsort pytest.py TEST test.sh vimtest
$ ls -x | cat
aa aaaa aabb aabbaa aabbbb aabbccdd aabbccddcc aabbddbb
aaccaa aaccdd aaddaa aaddccddccdd aaddee errsort pytest.py TEST
test.sh vimtest
ls
출력이 파이프되면 변경된다는 점을 이해하는 것이 중요합니다 . 이제 grep과 일치하는 세 줄이 있습니다.
첫 번째와 두 번째 줄이 (여러 개) 일치하므로 aa
두 줄이 모두 인쇄됩니다.
$ ls -x | egrep -i "(aa)(dd)?(cc)?(dd)?((bb(ccdd)?(bb)?)?)|(ccdd)"
aa aaaa aabb aabbaa aabbbb aabbccdd aabbccddcc aabbddbb
aaccaa aaccdd aaddaa aaddccddccdd aaddee errsort pytest.py TEST
$ ls -x | egrep -i "(aa)(dd)?(cc)?(dd)?((bb(ccdd)?(bb)?)?)|(ccdd)?"
aa aaaa aabb aabbaa aabbbb aabbccdd aabbccddcc aabbddbb
aaccaa aaccdd aaddaa aaddccddccdd aaddee errsort pytest.py TEST
test.sh vimtest
표시된 대로 (ccdd)?
세 번째 줄은 .
귀하의 파일 목록이 올바른 형식이 아니라고 가정합니다.
답변2
grep
아니요성냥...와 같은 파일은 errsort
해당 줄과 일치하며 실제로 일치하는 유일한 것은 (aa)
(다른 모든 것은 선택 사항이므로 ?
)입니다. ls -x
ls의 출력을 선택했기 때문에긴 줄그리고 aa
경쟁.
일치하지 않는 대체 그룹이 내가 이해할 수 없는 더 많은 파일을 표시하는 이유는 egrep의 버그일 수 있습니다.