명령 행에서 정규식 바꾸기


21

커맨드 라인에서 정규식 대체가 가능합니까? 지금은 메모장 ++를 사용 하여이 작업을 수행하고 있습니다. 커맨드 라인에서 FINDSTR 만 사용할 수 있습니다. 마치 된 파일 / 라인 만 찾을 수 있습니다

. 편집 :
어쩌면 VB 스크립트를 만들어 cmd에서 실행할 수 있습니까? 방금 내용으로 "hi.vbs"파일을 만들었습니다.

Msgbox "Hi Buddy"

그런 다음 cmd를 사용하면 명령 줄에서 "hi"를 입력하여 직접 실행할 수 있습니다.
따라서 배치 스크립트로 가능하지 않으면 VB 스크립트 트로프 배치를 사용할 수 있습니다. 또는..?


결국 당신은 결론을 내리지 않은 문장을 넣고 전체 편집 부분이 문제를 가리키고 있지 않습니다. "vb에서 hello world를 만듭니다. 배치에서 이와 같은 것을 만들 수 있습니까? @IanPugsley가 게시 한 답변을 확인하십시오. 할 수있는 쉬운 방법 정규식 - 대체합니다.
mjsr

@Aziz :이 답변 중 어느 것이 당신을 위해 일한 적이 있습니까? 그렇다면, 그 것을 수락 하시겠습니까? 그것은이 공동체에 참여하는 것의 일부입니다. 우리가 서로에게 도움을 주셔서 감사합니다. 허용 된 답변에 대한 평판은 다른 사용자가 서로의 경험을 평가하는 데 도움이됩니다. 감사.
JRobert

커맨드 라인에서 MYVBREPLACE (.vbs) FILENAME REGEXPATTERN REPLACEMENT와 같은 것을 호출하려고했습니다.
Aziz

답변:


11

여기로 이동하십시오
http://gnuwin32.sourceforge.net/packages.html
SED로 스크롤 하십시오 . 코어 유틸리티를 다운로드 한 상태에서도 다운로드하십시오.

이 명령은 전체적으로 및 각 행에서 a를 b로 바꿉니다. 라인에서 처음 나타나는 것은 아닙니다.

예 : sed "s / a / b / g"a.txt 사용

C:\>type a.txt
aaaa
aaa

C:\>sed "s/a/b/" a.txt
baaa
baa

C:\>sed "s/a/b/g" a.txt
bbbb
bbb

C:\>

VBScript는 정규식을 지원하므로이를 찾아서 바꿀 수 있습니다.

dim re, s
set re = new RegExp

re.Pattern="in"
re.Global=True 'false is default
s="bin din in"
MsgBox re.Replace(s,"xxx")

bxxx dxxx xxx를 표시합니다


놀라운 미친 도구! 이 도구는 너무 많이 사용되었습니다. 나는 그것을 사용할 수는 없지만 gnu.org/software/sed/manual/sed.html#The-_0022s_0022-Command를 읽으면 이것이 내가 기대했던 것보다 훨씬 많은 것을 할 수 있음을 알 수 있습니다. 대단히 감사합니다
Aziz

새로운 버전의 bash는 정규 표현식을 수행 할 수도 있습니다. 때로는 간단한 작업에 충분하고 sed조차 사용할 필요가 없습니다.
vtest

아무도 모르는 경우 vtest가 말한 것을 다시합니다. cygwin에는 bash가 있습니다.
barlop

sed는 멀티 라인 대체와 짜증
kofifus

1
@KennyEvitt cmd 쉘은 유니 코드 utf8 chcp 65001에 chcp를 표시하고 사용하도록 조정해야합니다 (utf16 encoding.chcp 1200 및 chcp 12001은 지원 되지 않음 ) stackoverflow.com/questions/9321419/… 확실하지 않음 박하. Powershell을 다시 확실하지 않습니다. 그러나 utf-8은 cmd 또는 powershell에서 지원됩니다. 지원되는 글꼴이 택배처럼 사용되며 코드 페이지 65001 인 한 utf16 인코딩에는 cmd / u가 있습니다.
barlop

26

Windows가 무료 명령 줄 도구를 작성 하여이 작업을 수행했습니다. rxrepl 이라고 하며 , 유니 코드 및 파일 검색을 지원합니다. 일부는 유용한 도구를 찾을 수 있습니다.

rxrepl은 Perl 호환 정규 표현식 (PCRE)을 사용하여 텍스트 파일의 텍스트를 검색하고 바꾸는 Microsoft Windows 명령 행 도구입니다.

다음과 같은 기능이 있습니다.

  • Perl 호환 정규 표현식을 사용하여 검색
  • 대체 텍스트에 그룹 일치 사용
  • Windows 및 Unix 라인 엔딩 지원
  • 유니 코드 지원
  • 여러 검색 / 바꾸기 인수를 허용합니다
  • 옵션은 옵션 파일에 제공 될 수 있습니다
  • 파일 스캔
  • 미리보기 모드
  • 라인 및 전체 파일 일치 모드

여기에 이미지 설명을 입력하십시오


4
이거 엄청나 네! 나와 같고 예제가 필요한 경우 파일에서 "foobar"를 "foofighters"로 바꿉니다. rxrepl.exe -f file.txt -a -s "(foo) bar"-r "\ 1fighters"
Dunc

1
또한 github와 같은 소스를 사용하겠습니까? 오픈 소스가 아니라면 완전히 이해할 수 있지만 매우 궁금합니다.
kayleeFrye_onDeck

1
@Steztric 정말? 저는 64 비트 윈도우를 실행하고 있는데 이것을 실행하는 데 아무런 문제가없는 것 같습니다C:\WINDOWS\System32\cmd.exe
kayleeFrye_onDeck

1
멋진 도구! Windows Server Std 2012 R2 x64에서 문제없이 실행 고마워!
kwrl

2
훌륭한 도구입니다. 계속 유지하시기 바랍니다

12

Scripting Guy는 PowerShell에서이 작업을 수행하는 방법을 설명 합니다 (최신 Windows OS에서는 추가 다운로드가 없으며 이미 설치되어있을 것입니다).

(A 교체하려면 다음을 실행, 그것을 시작 *A를을 @) :

(Get-Content C:\Scripts\Test.txt) | 
Foreach-Object {$_ -replace "\*", "@"} | 
Set-Content C:\Scripts\Test.txt

이것은 긍정적이고 부정적인 미리보기를 포함하여 .NET 정규 표현식을 지원하며 메모장 + +는 버전 6.x 이전의 정규 표현식에서 지원하지 않습니다 (메모장 + +를 좋아하는 한).


1
Notepad ++는 버전 6
Bob

5

fnr.exe 를 찾았 습니다 . GUI와 명령 줄이 있습니다.

여러 파일에서 텍스트를 찾아서 바꾸는 오픈 소스 도구입니다.

풍모

  • 단일 파일 다운로드-fnr.exe (127kb)
  • Windows 응용 프로그램을 사용하거나 명령 줄을 통해 여러 파일에서 텍스트 교체
  • 일치하는 곳을 찾으려면 찾기
  • 대소 문자 구분 검색
  • 하나의 디렉토리에서 파일 검색 또는 하위 디렉토리 재귀
  • 정규식
  • 여러 줄 문자 찾기 및 바꾸기
  • 배치 파일에 넣을 명령 줄 텍스트를 생성하는 명령 줄 생성 버튼
  • 명령 줄 도움말
  • 찾기 / 바꾸기 엔진의 단위 테스트

명령 행 옵션보기

여기에 이미지 설명을 입력하십시오


1
GUI에서 "find"문을 확인하고 "Gen Replace Command Line"을 클릭 한 후 명령 줄 호출을 사용할 수 있습니다. 명령 줄 구문에 익숙해지기 위해 시간을 소비 할 필요가 없습니다.
sarh

변경 후 종료하지 못했습니다. 스크립팅에 특히 유용하지 않게하려면 enter 키를 눌러야합니다
G-.

@지-. 배치 파일에서 실행되는 경우 <enter>를 기다리지 않습니다.
Sergius

다른 파일 이름 / 확장자로 출력하는 방법을 찾을 수 없습니다
Rick

4

FINDSTR과 함께 정규식을 사용할 수있는 것 같습니다.

findstr [Windows CMD] :

findstr은 텍스트를 검색 할 수 있습니다 (file-name 파일에 pattern으로 지정됨). file-name에 와일드 카드 (* 또는?)가 포함되어 있으면 일치하는 모든 파일을 검색합니다 ./S 옵션은 현재 디렉토리뿐만 아니라 현재 디렉토리에서도 검색합니다. 패턴에 공백이 포함되어 있으면 / C : "일부 텍스트를 검색 할 것"과 같이 지정해야합니다. 패턴을 정규식으로 바꾸려면 / R 옵션을 사용해야합니다 ./I 옵션은 대소 문자를 검색합니다. 둔감하다.

FindStr의 도움말 ( Findstr /?)에서 :

/ R-검색 문자열을 정규식으로 사용합니다.

Regular expression quick reference:
  .        Wildcard: any character
  *        Repeat: zero or more occurrences of previous character or class
  ^        Line position: beginning of line
  $        Line position: end of line
  [class]  Character class: any one character in set
  [^class] Inverse class: any one character not in set
  [x-y]    Range: any characters within the specified range
  \x       Escape: literal use of metacharacter x
  \<xyz    Word position: beginning of word
  xyz\>    Word position: end of word

답변 주셔서 감사합니다. 그러나 이것은 내 질문이 아닙니다.
Aziz

2
findstr파일의 텍스트를 바꿀 수 없습니다!
Kenny Evitt

4

나는 파티에 조금 늦었지만 JREPL.BAT는 하이브리드 JScript / 배치 스크립트 기반 정규식 유틸리티 로 XP 이상의 Windows 시스템에서 기본적으로 실행됩니다.

전체 설명서가 스크립트에 내장되어 있으며,이를 통해 액세스 JREPL /?하거나 JREPL /??페이지 출력에 사용할 수 있습니다 .

JREPL은 JScript와 함께 제공되는 표준 ECMA 정규식을 사용합니다. ECMA 정규식은 powershell에서 사용 가능한 .NET 정규식만큼 강력하지는 않지만 여전히 대단합니다. 그리고 일반 사용자는이 유틸리티를 powershell보다 사용하기 쉽다고 생각합니다.

내장 된 JREPL 옵션은 이미 많은 고유 한 기능을 제공하지만 사용자가 제공 한 JScript를 주입하는 기능은 실제로 놀라운 가능성을 열어줍니다.

직장에서 비표준 exe 파일 다운로드를 허용하지 않기 때문에 스크립트를 개발했지만 배치 또는 JScript 스크립트 작성에 제한이 없습니다 :-)

링크를 따라 가서 스크립트 코드를 JREPL.BAT라는 파일에 복사하십시오. 사용 및 개발 히스토리에 대한 예제는 해당 스레드에서 후속 게시물을 읽으십시오. JREPL.BAT를 사용하는 많은 StackOverflow 답변도 있습니다.


3

두 가지 좋은 선택은 Cygwin 으로 Unix와 같은 bash와 같은 환경을 제공합니다 (cmd.exe와는 다른). 및 Unxutils , 개별 유닉스 유틸리티 모음의 Win32에서 포트. 두 패키지 모두 'sed', 'awk'및 'grep'을 참조하십시오.


2
unxutils는 오래되었습니다. 이제는 gnuwin32입니다
barlop

제안 해 주셔서 감사합니다. 내가 그것을 이해하지 못해서 미안하지만 지금은 SED가 그 일임을 알 수 있습니다.
Aziz

2018 년 현재 @barlop, gnuwin32도 오래되었습니다. cygwin이 더 최신입니다!
barlop

0

GSAR 을 사용하여 명령 행 검색 및 바꾸기를 수행 할 수도 있습니다 . 16 진 및 2 진에서도 작동합니다. 정규 표현식이 수행 할 수있는 복잡한 무거운 작업을 수행하지는 않지만 기본 검색 및 교체를 위해 빠르고 쉽게 작업을 수행합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.