請問如何在長文本每一行的前面和後面都插入特定的相同字元或文本?

例如:

床前明月光,

疑是地上霜。

舉頭望明月,

低頭思故鄉。

要在每一行的前面和後面都插入特定的相同字元或文本,變成

123abc 床前明月光, 456xyz

123abc 疑是地上霜。 456xyz

123abc 舉頭望明月, 456xyz

123abc 低頭思故鄉。 456xyz

這個例子只是短了點,如果是長文本該如何快捷操作

平時只用 notepad ++, vim 不太會用,另外有沒有 windows 平台上的 txt 工具軟體能實現多列一起編輯?我以前好像看到過一個輕量級txt軟體能進行快捷操作(每行插入相同內容),現在找不到了……

我找到了一些辦法,下面我將回答自己的提問,主要是做個備份,幫助有需要的同學,另外就是想知道還有沒有其他辦法?


對於長文本還用滑鼠操作挺有毅力的。既然在 vim 中都用正則表達式了,為什麼不直接在 notepad++ 裡面用呢?

分段操作:

一次性捆綁操作


說個非主流的

複製到 excel,前後插單元格,批量處理後,複製回 txt


現在我來回答自己的提問。

經過查閱一些資料,我找到了四種解決辦法,並在我的博客上寫了一篇總結:在文本每一行的行首和行尾都插入特定的相同字元或文本,現轉載如下:

辦法一:notepa++的列編輯

先說在每行行首插入相同文本的辦法。首先把原始文本粘貼到notepa++里,然後事先複製好你要重複輸入的字元123abc,然後把游標移到第一行第一列,也就是「床」的前面,然後按住ALT鍵,滑鼠從第一行直接拉到最末行,然後就看到游標變長了,最後直接ctrl+v粘貼即可。

然後把游標移到第一行的末尾,就可以用列編輯在每行行尾插入重複文本了。

辦法二: notepa++正則表達式替換

把原始文本粘貼到notepa++里後,搜索,替換,查找目標里輸入^,替換為里輸入123abc,注意:下方的查找模式里要選擇「正則表達式」,最後點擊「全部替換」就能看到效果了。

行尾操作也類似,查找目標里輸入$,替換為里輸入456xyz即可。

^匹配行首,而$匹配行尾。

辦法三:gVIM命令

如果你使用vim,那麼下面的命令可以讓你在每行快速插入重複字元。

每行的行首都添加自定義的文本或字元串:

:%s/^/要插入的字元串

每行的行尾都自定義的文本或字元串

:%s/$/要插入的字元串

例如要在每行行尾輸入456xyz,可以先打冒號,然後直接ctrl+v或者用手勢粘貼%s/$/456xyz即可。

另一個在每行行首插入相同字元的辦法,這是在國外網站上發現的:

先調游標到第一行的行首,然後按Ctrl+Q選擇列,然後按j選擇多列,然後按Shift+i,然後輸入你要像插入的字元串,最後按Esc就OK了。

辦法四:excel的CONCATENATE函數

先複製原始txt文檔,然後新建一個excel,在B1單元格右鍵,粘貼,然後在A1中輸入123abc,下拉複製;同樣在C1中輸入456xyz,下拉複製。然後在D1中輸入=CONCATENATE(A1,B1,C1),回車即可把A1B1C1連起來,最後下拉就完成了。

其中=CONCATENATE(A1,B1,C1)命令等同於=A1B1C1,當元素少的時候,使用比較簡便。

參考:

  1. Notepad++的列編輯功能

  2. vim 每行行首或行行尾插入相同字元串

  3. How do I insert text at beginning of a multi-line selection in vi/Vim?

  4. Excel中concatenate函數的使用方法


python搞定:

# coding: utf-8

text = """床前明月光,
疑是地上霜。
舉頭望明月,
低頭思故鄉。"""
text2 = ""

for s in text.split("
"):
text2 += "123abc " + s + " 456xyz
"
print text2

文件操作版:

# coding: utf-8

text = open("a.txt", "r").read()
text2 = ""

for s in text.split("
"):
text2 += "123abc " + s + " 456xyz
"
print text2


sublime text, 多行編輯,好用到不行


awk "{ print foo $0 bar }"


linux 終端: sed

os x, windows: sublime text , cmd/ctrl + a全選 -&> cmd/ctrl + shift + l多行編輯


用正則表達式就不說了,是款文本編輯器基本都有正則替換功能。

推薦個直觀無腦不用記的:

文本編輯器: Siphonink 虹吸墨


excel,A1B1C1


Vim的話:

%s/^(.*)$/123abc 1 456xyz/g

前面有人提到錄製宏,但是在實際使用上宏的效率比直接用正則表達式替換要慢得多。


vim中,錄製命令也可以。

qa開始錄製命令到a中,0定位到行首,i插入內容,esc退出,$定位到行尾,a附加,然後行尾內容,esc退出,j到下一行,q結束錄製命令。

接下來,@a重放剛才的動作,就是插入文本然後定位下一行。重複100遍,就是100@a了。

這種活我還是最喜歡錄製命令來干,簡單清晰,思路也便於理解


推薦閱讀:

平行坐標圖怎麼畫?
excel單元格中有幾組數據,如何將其拆分為幾行?同時不影響其他相關聯的數據
麻煩有excel高手幫我解釋下sumif(B:B,B:B,A:A)具體是什麼?
Excel 函數「vlookup」可不可以 lookup 到近似值?函數該怎麼寫?

TAG:應用程序Application | MicrosoftExcel | Vim | Notepad | 文字編輯 |