你有哪些絕妙高效處理文本操作的經歷?

按照常規的方法進行處理文本很麻煩並且費時間,但通過巧妙的方法(比如正則表達式)極大提高效率的例子。

希望大家也可以說說細節,是具體怎麼做的,向大家學習!
比如windows下的批處理,linux下各種腳本之類的,自己編了個腳本便解決了大問題。


對於高度格式化的文本,果斷上 AWK 或者 SED ,絕對輕鬆解決。

不過也有不那麼格式化的文本,這個時候就要上文本編輯器了,提供幾個 VIM 的實例。

Vimgolf,有各種網友出的題目,要求用最少的按鍵次數來完成,有 VIM 的各種奇技淫巧:VimGolf - real Vim ninjas count every keystroke!

如何使用vim整理聊天記錄? - Vim
vim如何有效處理制式內容? - Vim
如何用 Sublime 或者其他高級編輯器中正則表達式批量修改行前綴? - Vim
vim如何寫替換腳本實現以下功能?把a.txt 和1.txt合併成為a1.txt的效果 - Vim
【我用Vim來幹什麼】提取特定行 - Vim非編程手記 - 知乎專欄
VIM提取/刪除匹配行的方法(與Emacs keep-lines比較) - Vim非編程手記 - 知乎專欄

VIM 把 XML 格式化為普通文本的實例:Globals, Command Line and Functions on Vimeo

視頻封面globals,_command_line_and_functions_640x480視頻

處理 SRT 字幕:怎樣用vim編輯處理srt字幕內容,得到純對白英文句子? - 知乎用戶的回答

視頻封面VIM處理SRT字幕視頻


寫了一個文本編輯器,對付各種常見的複雜情況。這個軟體的很多功能充分利用了正則表達式,算是藉助正則表達式實現了一些針對普通用戶的功能。

當前最新版:2016年5月19日,v 2.7.2

藉助Cmd Markdown,重新書寫幫助文檔以及版本信息,極大限度的提高了可閱讀性,並提供大量的示例。請儘快嘗試最新版!

幫助文檔總是保持最新版的狀態,而且更為詳細。請優先考慮閱讀幫助文檔!知乎的這個答案因為傳圖片不太方便,所以以後可能就不更新了。
幫助文檔:文本編輯器 第四版 使用說明

下載地址:http://pan.baidu.com/s/1ntqPi7B
開源代碼:BYJRK/TextEdit · GitHub

由於作者的某些特殊愛好,所以所有版本都會出現在這個分享鏈接中。請自行挑選最新版進行下載。當然了,如果你想查看作者的黑歷史,不妨下載舊版本,體會一下「版本信息」裡面那麼多BUG沒有修復的使用體驗(雖然依舊有許多BUG等待發掘)

比如,這個歌詞:

首先,用括弧內容去除每行左邊的時間軸

然後,還是這個功能,保留括弧中的內容

或者,用文本替換功能,把「【」換成換行符(%return%為本程序設定的換行符,windows下為

總之,最後:

再比如,從網上找來了《Overfly》的歌詞,但是格式很是蛋疼

於是,第一步,用正則表達式,在每一句的中文和日文中間放一個換行符

第二步,用隔行刪除,並且保留中文內容。從而中日文分開

第三步,用括弧內容,刪除平假名注音

第四步,用自定義轉換列表,快速轉換被百度給毀掉的日文繁體字

順便,把中文歌詞的左邊右邊括弧都去掉

再比如,從網上找來了一篇古文,但是裡面有數字標註的注釋。

接著用正則表達式功能,快速搞定

其他的功能還有很多,比如:

當然了,正則表達式能幹的事情,這個軟體也都能幹。比如抓取html裡面的url之類的(請無視我隨便寫的抓取url的正則表達式,效果不太好,只是為了演示)

總而言之,正則表達式是個好東西,但是並不是人人都會用。我所做的事,就是盡我自己所能,幫助更多的不會使用正則表達式的人,去更高效的處理文本。


在我的bashrc里,有一個函數是這樣的
# find bad utf-8 byte in a file with binary search
# $1 is file name, and split two file called ${1}0 and ${1}1
bad_utf(){
split -l $((($(wc -l $1 | awk "{print $1}")+1) / 2)) -d -a1 $1 $1 vi ${1}0 vi ${1}1
}
這貨的作用是,如果你發現一個文件打開亂碼了,而且你知道亂碼原因是因為某種原因的數據拼接將兩種或更多不同編碼(比如GBK和UTF-8),有問題的這個文件叫chaos.txt,那你輸入bad_utf chaos.txt,它會將文本平分成兩個文件,分別叫chaos.txt0和chaos.txt1,這時vi會分別打開這倆文件讓你瀏覽,確定倆文件哪個有問題(或者很悲催的倆都有問題),然後繼續輸出bad_utf chaos.txt0(或chaos.txt1),繼續下去,二分地找出有問題的那一行。
數據清洗的悲哀……


算不上高大上吧,幫室友批量改名,把文件名寫入文本中,用vim錄製宏/正則批量改名,執行該文本批量改名。其實可以用`rename`這個命令+正則實現。。


http://m.weibo.cn/1701018393/xDaDDp6qe


讓我來自問自答來拋磚引玉吧,雖然很普通很簡單,但確實是極大提高了我的效率。問題是這樣的,首先大量類似數據如下

"currenttime": 1413514319689, //當前時間
"weather": cloudy, //天氣
"date": 20150726, //日期
" customerId": 111111, //客戶登錄 id
"membername": "李四" //客戶姓名

現在我要做的是將注釋全部去掉,把剩下的數據變成一行,其實也就是json數據串的一部分,因此需要我手動刪除出注釋,去掉一些中文分號,去掉多餘的空格合併為一行,最後變成這種情況,

"currenttime":1413514319689,"weather":cloudy,"date":20150726,"customerId": 111111,"membername":"李四"

問題是,數據量很大,重複操作很多並且繁瑣。

我是這樣做的解決方法:
將數據複製到vim中,

:%s///.*$//g // 去掉所有注釋
:%s/:/:/g // 將中文分號變為英文分號
:%s/s//g // 去掉所有的空格
:%s/
//g // 將多行合併為一行

問題就這麼愉快的解決了,雖然只是一些很簡單的正則表達式替換,但這極大提高了我的效率,學以致用,讓我有一點點成就感,哈哈。
PS: 後來,我也試過用vim的宏操作,將繁瑣的操作錄製成宏操作,也可以輕鬆的解決這個問題。


python正則,從網頁中抓取大量鏈接。
輸出"http://www.xxx.com","http://www.xxx.com"。。。。。直接複製給String[]


Sublime Text, 神器,誰用誰知道。


以前有幾百個文本文件要合成一個文件。我的同事,一個個打開一個個複製。我實在看不下去了。
1.按快捷鍵 win+r輸入 cmd回車
2. cd 文本文件夾路徑
3.輸入 copy *.txt all.txt 回車

分分鐘完成。已經把幾百個文本合成一個文件了。
-------------------------分割線----------------
用計算機工作,那麼學點腳本吧,比如:簡單的bat,還有強烈推薦學習一下 ahk,入門什麼的都很簡單,可以到中文論壇:http://ahk8.com 也可以QQ加群討論:3222783


perl -n -e


開始學習AWK的時候看到的例子。不那麼規律的文本,可以先往裡面添加雜訊,添加完了以後規律性就強多了。

另外,所有那些秀Sed的傢伙們你們真的看過Sed的黑科技嗎?那種上古年間的野獸,你們還是小心點兒好。


python的

glob
shutil

在伺服器上需要操作大量文件的時候用這2個library來寫腳本

批量執行linux命令非常方便

http://www.zhihu.com/question/24590883/answer/32651754


操作比較複雜的和基本的常用單個命令就不說了

快速調整縮進格式:
格式比較亂比如全部集中到一行的 XML/HTML 文檔,用 Vim 打開
:%s/&>&
&ggVG 全選
=
清爽了
(或者合併為gg=G。gq 重新格式化我反倒用的少)

排序去重:
:sort u

根據搜索結果執行特定命令:
比如刪除含有某字元串的行
:g/blah/d
刪除命令 d 可以換成其他許多種操作,包括移動到搜索結果命中行之外的地方再執行

快速加減:
Ctrl+A/Ctrl+X 是對游標所在數字加/減1(Windows gVim 需要不載入或修改 mswin.vim)
前面帶上數字就可以直接加減任意數字

快速操作指定範圍內文本:
游標在引號、括弧等包圍的文本上時採用:
[命令][範圍類型][符號]
的組合模式可以快速選中並操作

命令如:
c 刪除並進入插入模式
d 刪除
y 複製
v 選擇

範圍類型如:
i 內部(inside 或 inner),表示不包括引號、括弧這些符號
a 外部(around),表示連外圍的符號一起操作

符號如:
各種引號、括弧,與文本對象概念有關,可以通過插件擴展

例如在 & 中,使用 ci&< 就會刪除方括弧內的內容並在插入模式中等待繼續輸入文字
打開IDE,Ctrl+f


windows上notepad++的正則替換很好用啊


用perl處理文本生成計算書。
用perl或者vim處理Excel表格式的電話本,
然後得到vcard的電話本,然後一下子導入到
智能手機!


我要來黑一黑某廠商的部署人員, 我們買了100把刀片, 裝一樣的CentOS系統, 有一天總部的工程師命令他們把所有機器的內核啟動添加幾個參數, 包括禁用LVM之類的提高啟動速度的參數。高能來了:該廠商的現場執行人員問我借了三個顯示器, 三個鍵盤, 然後找兩個同事一個機器一個機器用VIM添加參數, 忙活了幾個小時。因為有輸錯的情況~

然而用sed+shell for循環只需要幾秒鐘就可以解決

for i in $(seq 1 100); do
ssh node$i sed -i -e "s/^([ ]*vimlinuz.*)/1 balabala" /boot/grub/menu.lst
done

當然我也是個sed渣, 正則表達式肯定有更好的寫法。


處理超大文件,連續內存不夠,開一個固定的連續內存,操作結果一段段存到硬碟上


perl大法好


用Lua,解析器100多KB,天生就是為了處理文本來的,不需要其他任何依賴


最常用的是用vim批量替換,錄製宏進行一些簡單的操作。
複雜一點的么就根據需求網上找一段awk。
再不行,直接用python寫個腳本


awk大法好


推薦閱讀:

TAG:高效工作 | 程序員 | Linux | Vim | 正則表達式 |