Windows 명령줄을 사용하여 정규식 찾기 및 바꾸기를 실행하는 방법

Windows 명령줄을 사용하여 정규식 찾기 및 바꾸기를 실행하는 방법

명령줄을 사용하여 notepad++에서 수행하는 복잡한 찾기 및 바꾸기를 수행하고 싶습니다. 웹에서 많은 솔루션을 찾았지만 그 중 어느 것도 내 요구 사항과 일치하지 않습니다.

정규식 찾기 및 바꾸기를 수행하려는 파일이 하나 있습니다.

정규식 문자열이 포함된 또 다른 파일(찾기 및 바꾸기 모두 가능합니다. 이를 사용하여 두 개의 별도 파일 등을 만들 수 있습니다.)

위 작업을 수행할 수 있는 경우 이 파일에 정규식 찾기 및 바꾸기 문자열을 배치하는 방법도 안내해 주십시오.

편집하다

Windows용 PCRE 호환 찾기 및 바꾸기 유틸리티가 있습니까?

답변1

Windows "findstr" 명령이 있지만 대체할 수 없으며 정규식 지원이 제한되어 있습니다. 그 외에도 *nix를 사용하여 이를 수행하는 방법을 살펴보고 Windows에서 해당 도구를 사용하십시오. 따라서 Windows용 grep 및 sed를 얻을 수 있습니다.

일부 배치 사용자는 Microsoft jscript를 배치와 병합하고 검색 및 바꾸기 옵션이 있는 도구(배치 전문가 dave benham이 작성)를 사용할 수 있습니다. 시스템이 매우 잠겨 있고 EXE를 다운로드할 수도 없는 경우에는 이것이 완벽하다고 생각합니다. 그러나 그렇지 않으면 스크립트를 다운로드하거나 복사/붙여넣는 것은 타사 제품을 얻는 것과 거의 비슷하며 널리 사용되고 Windows용으로 다운로드할 수 있는 grep 및 sed와 같은 도구가 이미 있습니다.

이것은 *?약간 고급이며 -P(PCRE - Perl 호환 정규식)가 필요한 지연 평가입니다.

C:\>echo abccccdd| grep -oP "a.*?c"
abc

C:\>

정규식의 수준이 낮으면 원하는 경우 -P를 제거할 수 있습니다. 나는 그것을 유지하지만.

Sed는 PCRE까지는 아니지만 이러한 명령줄 유틸리티를 사용하여 차선책으로 보이는 기능을 지원합니다. ERE(확장 정규식). -r과 함께 sed를 사용하면 불필요한 백슬래시를 사용하지 않아도 됩니다. 지난번에 확인했을 때 -r 없이 BRE(기본 정규식)를 사용했습니다.

이는 해당 정규식 일치 항목을 아무것도 대체하지 않음을 의미합니다.

C:\>echo abccccdd| sed -r "s/c{2,3}//"
abcdd

이 /g 수정자는 전역 검색 및 교체를 수행하므로 첫 번째 일치 항목만 교체하지 않습니다.

C:\>echo abacacda| sed "s/a//g"
bccd

gnuwin32로 얻을 수 있습니다. 또는 cygwin에서 사용할 수 있지만 작은따옴표를 사용하고 cygwin을 사용하는 경우 cygwin의 bash 쉘과 같은 cygwin의 쉘에서 수행하는 것이 더 좋습니다.

이 명령은 분명히 파일에서 작동할 수 있습니다.

C:\>type a.a
asdf

C:\>


C:\>grep -o a a.a
a

C:\>sed "s/a/z/" a.a
zsdf

C:\>

아니면 펄

grep은 검색 및 교체를 수행하지 않습니다. sed는 PCRE를 지원하지 않지만(적어도 내가 가지고 있는 sed는 지원하지 않습니다) Sed는 그렇게 할 것입니다. 또 다른 옵션은 Perl입니다. Perl Regexes는 더 좋지는 않더라도 PCRE만큼 좋습니다. 이봐https://stackoverflow.com/questions/4794145/perl-one-liner-like-grep이 링크가 언급되어 있는 것을 확인하세요터미널에서 정규식과 일치시키기 위한 Perl?거기에 내 대답이 있습니다. Perl 형식의 grep 및 sed가 있으며 분명히 Perl에 대한 훌륭한 정규식 지원을 받게 될 것입니다.

(내가 말했듯이) 두 번째 링크에서 내 대답을 보면 내가 cygwin에서 Perl을 가져와 사용했다는 것과 그것이 어떻게 사용될 수 있는지 알 수 있습니다.

관련 정보