2015-09-20 71 views
-2

所以我想搜索一個文本文件的2個相鄰的字母。 文本文件會以這種格式批量添加兩個相鄰的字母周圍的報價

a 
b 
c 
d 
e 

但是,如果有說aa,我希望添加「」圍繞它,所以它最終會被"aa"。 最好使用批次。 此外,如果它碰巧是xz,結果將是"xz",我可以用一個簡單的查找和替換來做到這一點,但它需要676個不同的場景,所以有更簡單的方法嗎?

+1

您的要求是不明確的。文件是否只能包含帶有一個或兩個字母的行?如果不是,請描述其他情況和期望的結果。 – Aacini

+0

該文件每行有1或2個字符,全部爲英文字母的字母 – Jokru

+0

@Paul英文字母表中有25個字母,每行有1或2個字符。如果只有1我不需要做任何事情。如果有2個,則有625種不同的可能性(它可以是「aa」,「ab」,「ac」一直到「zz」25^2或25平方)http://bit.ly/1RPEprA – Jokru

回答

0
@echo off 

(
echo a 
echo c 
echo cd 
echo def 
echo e 
echo fg 
echo efg 
echo xz1 
echo xz123 
echo xz14 
)>_list.tmp 

setlocal EnableDelayedExpansion 
for /F %%i in (_list.tmp) do ( 
    set "str=%%i" 
    if "!str:~1!" EQU "" (echo !str!) else if "!str:~2!" EQU "" (echo "!str!") else (echo !str!) 
) 
exit /b 0 

輸出

a 
c 
"cd" 
def 
e 
"fg" 
efg 
xz1 
xz123 
xz14 
+0

完美,非常感謝你,現在有一種簡單的方法來取代原來的文件,我可以想出一個辦法,但你的可能會更好 – Jokru

+0

@Jokru如果你需要批量使用正則表達式,sed是一個很好的解決方案,你可以在Sourceforge的GnuWin32中找到它。還有JREPL.bat混合批處理http://超級用戶。com/questions/975704/edit-lines-in-txt-file-with-bat/ – Paul

+0

@Jokru http://gnuwin32.sourceforge.net/packages/sed.htm – Paul

0

使用捕獲組。

sed 's/\([a-z]\{2\}\)/"\1"/g' file 

sed 's/[a-z]\{2\}/"&"/g' file 

例子:

$ echo 'ad b dd fg' | sed 's/[a-z]\{2\}/"&"/g' 
"ad" b "dd" "fg" 
+0

我需要所有的字母xz覆蓋,這是否做到了? – Jokru

+0

ya,'[a-z]'涵蓋所有小寫字母,如果你想要大寫和小寫,那麼把'[a-z]'改成'[A-Za-z]' –

+0

sed不被識別? – Jokru

0

如果 「文件每行有1或2個字符,所有這些都是英文字母的字符」,你想「在兩個相鄰的字母周圍添加引號」,那麼你真的想爲有2個字符的行添加引號,不管它們是哪個字符,不是嗎?

@echo off 
setlocal EnableDelayedExpansion 

rem Process all file lines 
for /F "delims=" %%a in (input.txt) do (
    set "line=%%a" 
    rem If the line have just one character 
    if "!line:~1!" equ "" (
     rem Show the same line 
     echo %%a 
    ) else (
     rem Enclose the two chars in quotes 
     echo "%%a" 
    ) 
) 
+0

這是完美的,但現在我只需要原來的文件替換爲編輯 – Jokru