2016-08-19 152 views
2

我想知道是否有人可以提供幫助。查找並替換文件夾中的多個文本文件

我有大量的文本文件具有相同類型的信息。下面是兩個例子,所有的文件包含4行:

no: 734 
word=achieving 
def: 
LinkToAnother=achieving 

no: 657 
word=accumulating 
def: 
LinkToAnother=accumulating 

Original state of the text within the files

我如何使用搜索&使用崇高或作爲替代DOS批處理文件腳本在多個文件中替換(使用正則表達式)?它應該用字母代替第四行(ing)的最後三個字母(e),因此實現以下目標:

no: 734 
word=achieving 
def: 
LinkToAnother=achieve 

no: 657 
word=accumulating 
def: 
LinkToAnother=accumulate 

The outcome of the text within the files

我有一個頭痛試圖找出如何只在文本文件中選擇我想要的字符的第二個實例。非常感謝這裏的任何幫助。

回答

0

試試這個:

@echo off 
setlocal EnableDelayedExpansion 

for %%a in (*.txt) do (
    (for /L %%i in (1,1,4) do set /P "line[%%i]=") < "%%a" 
    (for /L %%i in (1,1,3) do echo !line[%%i]! 
    echo !line[4]:~0,-3!e) > "%%a" 
) 

那就是: 「用字母(E)取代第四行的最後三個字母」。

如果這個靈魂太慢了,有幾個修改可以幫助加快速度。

+0

嗨Aacini,謝謝喲你這個工作。但是,如何調整它,以便它只在那些以特定的最後三個字符(「ing」)結尾而不是最後三個字符結束的行上執行任務。因此我可以適應其他情況。 –

0

如果安裝通過MSYS的sed或WINSED你可以做以下

sed -b -i -e "4s/ing\(\s*\)$/e\1/" 

它打開所有*.txt文件(當前目錄)和編輯四號線,以取代ing結尾的文件並更改爲e

回車(\r)字符被保留。

0

既然你問如何在崇高的文本做到這一點,下面的正則表達式模式對我的作品在查找對話框:

查找:^((?:word|LinkToAnother).*)(ing)$

替換:$1

如果您想忽略鍵名,請改用^(.*)(ing)$

擊穿

  • ^ - 串的開始,或在多線圖案線的開始
  • 第一捕獲組(將$1):
    • (?:...) - 被動(非捕獲)組wordLinkToAnother
    • .* - 0或多個任意字符(除新行)
  • (ing) - 用於ing秒捕獲組(將$2
  • $ - 字符串的結束,或在多線圖案
  • 線的端

由於我們只有第一個捕獲組後,$1放入更換

+0

哇,謝謝idleberg這個作品,哪本書或網頁會教我這個級別的regx?你能詳細解釋一下這裏發生的事情嗎? –

+0

我總是回到[RegEx Cheat Sheet](https://www.cheatography.com/davechild/cheat-sheets/regular-expressions/),並在網站上測試我的模式,例如[RegExr](http ://regexr.com/)。順便說一句,如果它有助於解決您的問題,請接受答案! – idleberg

相關問題