Vi替換命令用法練習 環境www.2cto.com RedHat Linux 9 + VWWare 8.0 + SSH 3.2.9 問題 假設有一個CSV(comma separated value)檔案,裡面有一些我們需要的資訊,但是格式卻有問題,目前資料的列順序是:姓名,公司名,州名縮寫,郵遞區號,現在我們希望講這些資料重新組 織,以便在我們的某個軟體中使用, www.2cto.com 需要的格式為:姓名,州名縮寫-郵遞區號,公司名。 也就是說,我們要調整列順序,還要合并兩個列來構成一個新列。另外, 我們的軟體不能接受逗號前後面有任何空格(包括空格和定位字元)所以我們還必須要去掉逗號前後的所有空格。 原檔案是這樣的:Bill Jones,? ? ?HI-TEK Corporation ,? CA, 95011 Sharon Lee Smith,? Design Works Incorporated,? CA, 95012 B. Amos? ?,? Hill Street Cafe,? CA, 95013 Alexander Weatherworth,? The Crafts Store,? CA, 95014 我們希望把它變成這個樣子: Bill Jones,CA 95011,HI-TEK Corporation Sharon Lee Smith,CA 95012,Design Works Incorporated B. Amos,CA 95013,Hill Street Cafe Alexander Weatherworth,CA 95014,The Crafts Store 解決 步驟一:將源檔案儲存成文字文件,如test.txt 步驟二:將test.txt上傳到Linux中,這裡可以使用SSH的檔案上傳功能。 步驟三:將test.txt用vi開啟 步驟四:執行以下命令(輸入命令時注意輸入冒號,退出儲存輸入wq,退出不儲存使用q或者q!): 1 去掉所有的問號(?) [plain] %s/?//g 2 去掉逗號前後的所有空格 [plain] %s/[ \t]*,[ \t]*/,/g 3 實現功能 [plain] %s/\([^.]*\),\([^.]*\),\([^.]*\),\([^.]*\)/\1,\3 \4,\2/g 實現效果