2012-06-21 71 views
1

引號之間的字符串我有「input.txt中」,我想搜索字符串,並提取引號之間的字符串 我input.txt中只有2行:提取使用批處理

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

我想批處理從引號中提取名稱(包含空格)並將它們放入變量中(在這種情況下,只需要兩個變量)。例如,我想設置兩個變量:

name= james carter 
name=fabio rossi 

所以我可以批量使用這些變量來做一些未來的操縱。

ps。其確定使用SED如有必要

編輯

這似乎是不可能的,所以我不知道是否可以只取串保持引號,像這樣

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

所以現在的問題是,採取name='後所啓動和'

+1

你試過了什麼?你的代碼在哪裏失敗? – jeb

+0

這個問題,如果我從輸入中刪除引號,那麼它將只需要詹姆斯放棄卡特因爲空格,即使有空格開頭的問題,所以我決定把名稱放在單引號之間(我沒有使用「」,因爲它似乎使批處理文件的問題),但現在我不知道如何提取它們之間的東西,也嘗試過使用sed但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)。

編輯:修改代碼以丟棄不包含字符串name=的行。

+0

只能使用相同的問題解決問題grep?有沒有一個表達式來找到name ='bal bla'並取出bla bla? – Leo92

+0

@Leo92是的,但你也可以使用dbenham的解決方案,它根本不使用Sed或grep。 –

+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

優秀的本地解決方案:)謝謝 – Leo92