2012-06-21 5 views
1

를 사용하여 따옴표 사이의 문자열을 추출하고 난 내 input.txt을을 문자열을 검색하고 따옴표 사이의 문자열을 추출 할 단지 2 라인이 있습니다나는 "input.txt을"이 배치

name=' james carter' nationality = ' usa ' age=32 
name='fabio rossi' nationality = ' italia - milano ' age=19 

내가 원하는을 배치를 사용하여 따옴표에서 이름 (공백 포함)을 추출하고이를 변수에 넣으십시오 (이 경우에는 두 개의 변수 만 필요합니다). 예를 들어, 두 개의 변수를 설정하고자합니다 :

name= james carter 
name=fabio rossi 

그래서 이러한 변수를 향후 사용할 수 있습니다.

ps. 그 필요가

가 편집

불가능 할 것 같다, 그래서 그냥 따옴표를 유지 문자열을 취할 수 있다면이

name1=' james carter' 
name2='fabio rossi' 

처럼, 궁금 그래서 문제가 지금의 경우 sed를 사용하려면 '확인' , name=' 후 무엇을 시작 걸릴 '

+1

시도한 것은 무엇입니까? 코드가 어디에서 실패 했습니까? – jeb

+0

입력에서 따옴표를 지우면 공백으로 인해 카터를 버리는 제임스 만 사용하게됩니다. 심지어 공백으로 시작하는 문제가 있으므로 작은 따옴표 사이에 이름을 넣기로했습니다. didnt 사용 "")하지만 지금은 그 사이에 무엇을 추출 할지도 모르겠지만 sed로 시도했지만 문제는 모든 파일을 줄 단위로 처리하지 않습니다. – Leo92

답변

3

으로 끝이 시도 할 수 있습니다 :

@echo off 
setlocal enabledelayedexpansion 
set "INPUT_FILE=input.txt" 
set "SED_CMD=sed "s/name='\(.[^^']*\)'.*/\1/"" 
set i=0 
for /f "usebackq tokens=*" %%a in (`findstr "name=" %INPUT_FILE%`) do (
    set /a i+=1 
    for /f "usebackq tokens=*" %%v in (`echo %%a ^| %SED_CMD%`) do (
     echo %%v 
    ) 
) 

그런 다음 원하는 값으로 변수 (name1, name2) 등을 열거했습니다.
이 형식은 지정된 양식 (, 즉name='something' blah blah)이있는 모든 행에서 작동합니다.

EDIT : name= 문자열이 포함되지 않은 행을 삭제하는 코드가 수정되었습니다.

+0

동일한 문제 만 사용하여 해결할 수 있습니까? 그렙? name = 'bal bla'를 찾고 bla bla를 가져 오는 표현식이 있습니까? – Leo92

+0

@ Leo92 yea이지만 Sed 또는 grep을 전혀 사용하지 않는 dbenham의 솔루션을 사용할 수도 있습니다. –

+0

그래,하지만 이건 내 요점이 아니야, 내 grep 기술을 향상시키고 싶습니다. 그래서 grep 만 사용해서 저에게 가르쳐주세요. – Leo92

2

관심의 각 줄은 항상 다음 기본 배치 해결책은 간단하다, name='을 시작으로 같은 포맷하는 경우 :

@echo off 
setlocal 
set input="test.txt" 
for /f "tokens=1,3 delims=:'" %%A in (
    'findstr /b /c:"name='" %input% ^| findstr /n "^"' 
) do set "name%%A=%%B" 

이 솔루션은 이름 값이 결코 : 문자를 포함하지 않는 것으로 가정합니다.

+0

훌륭한 네이티브 솔루션 :), thanks – Leo92

관련 문제