2013-03-09 2 views
0

내가 _ 문자열이 포함 된 경우 DOS 명령루프 파일에서 문자열 떨어져 구문 분석이

와 명령 줄에 줄에서 단어를 분석하려고 해요 도스 ("그때는 그것을 저장할 . 파일 예 :. 그렇지 않으면, 나는 그것을에 어떤 움직임을 무시하려는

js\.svn\text:  $errors=  '</b> - ' . _("LABEL") . ' '  . _('ERR 

나는 DELIM가 어떻게 작동하는지 알아 내려고 또는 나는 경우 힘든 시간을 보내고있어 이 경우에도 사용해야합니다. 전체 줄 출력에 많은 예제가 있지만 문자열은 아닙니다.

OR ... 더 이상 줄이 없을 때까지 각 단어를 통해 for 루프를 살펴볼 수 있다고 생각했습니다. 시작 단어가 일치하면 _ ("다음에 출력 할 것입니다. 파일?

이와 비슷한?

for /F "tokens=1*" %%i in (get_list.txt) do(
    for %%A in (%%j) do(
     if (%%A == "_("")) >> get_id.txt 
) 
) 

누군가 내 구문을 수정하거나 안내 할 수 있습니까?

+0

수퍼 유저에게는 더 많은 행운이 있습니다. –

답변

0

편집

질문을 다시 읽은 후, 나는 당신이 원하는 것을 완전히 확실하지 않다. 전체 줄을 일치 항목이 아닌 텍스트 파일에 덤프 하시겠습니까?

나는 다른 것에 대해서도 명확하지 않습니다. get_list.txt에 PHP-ish 코드가 포함되어 있습니까? 아니면 PHP-ish 코드를 확인하려는 파일 목록이 있습니까?

get_list.txt이 코드이고 일치하는 라인이 get_id.txt으로 덤프되도록하려면 findstr "_(" "get_list.txt" >> "get_id.txt" 만 있으면됩니다.


다음 대답은 _ ("match"문자열에 당신이 get_id.txt에서 원 모두가, 예를 들어, 단어 match 정확히 일치했다 나의 원래 가정에 제출했다.


경로 1

글쎄, 내가 너라면, 나는 이것을하기 위해 grep -o을 사용할 것이다. 그것은 for 루프로 할 수 있지만 grep을 사용하면 훨씬 쉽게 할 수있다. .

grep -P -o "(?<=_\([\'\"])\w+" get_list.txt >> get_id.txt 

... 당신이 캡처하고하는 것은 항상 인용 부호, 또는 ... 될 경우

grep -P -o "(?<=_\()[^\)]+" get_list.txt | grep -P -o "\w+" >> get_id.txt 

... 일부 취소 인용 정수, 부울이있을 수 있습니다 경우, 또는 인용 부호가없는 다른 데이터 유형이 있습니다.


경로 2

는 일반 배치 스크립트를 사용하여 주장하는 경우, 다음 두 번째 가장 효율적인 것은의 JScript의 정규 표현식 매칭을 활용하기 위해 JScript의 하이브리드 스크립트를 사용하는 것입니다.

@if (@[email protected]) @end /* 

:: batch portion 

@echo off 
setlocal 
for /f "delims=" %%I in ('findstr "_(" "get_list.txt"') do (
    cscript /nologo /e:jscript "%~f0" %%I >> get_id.txt 
) 

goto :EOF 

:: JScript portion */ 
var m=WSH.arguments(0).match(/_\([\'\"]?\w+/g); 
for (var i=0; i<m.length; i++) { 
    WSH.echo(m[i].replace(/_\([\'\"]?/,'')); 
} 

경로 3

당신이 진정으로 당신의 예에서와 같이 텍스트 파일 단어 별을 구문 분석 할 경우이 내가 생각하는 당신이 찾고있는 구문입니다. 텍스트 파일이 크다면, 가장 느린 솔루션 일 것입니다. 루프 배치는 매우 느릴 수 있습니다.

@echo off 
setlocal enabledelayedexpansion 

for /f "delims=" %%I in ('findstr "_(" "get_list.txt"') do (
    for %%x in (%%I) do (
     set word=%%x 
     set word=!word:_^(=! 
     if not !word!==%%x (
      set word=!word:"=! 
      set word=!word:'=! 
      >> get_id.txt echo !word:^)=! 
     ) 
    ) 
) 
0

외부 유틸리티 나 "FOR"가 필요하지 않습니다. 다음 행을 시도하십시오 :

>get_id.txt findstr _(\" get_list.txt 

Quotesign이 "이스케이프"합니다. 다음 줄은 작동하지 않습니다.

findstr _(\" get_list.txt >get_id.txt 
관련 문제