據了解,替換功能有sed,sub,gsub,gensub四種,下面分別講解其應用方式。
資料來源如下:
snk17173
3=東方玄幻(傳奇)
2=網遊
4=意境
snk17173
3=東方玄幻(傳奇)
2=網遊
4!=意境
snk17173
3=東方玄幻(傳奇)
2!=網遊
snk17173
3!=東方玄幻(傳奇)
3=軍事歷史
snk17173
3!=東方玄幻(傳奇)
3!=軍事歷史
4=遊戲原畫
snk17173
3!=東方玄幻(傳奇)
3!=軍事歷史
4!=遊戲原畫
1=原創
snk17173
3!=東方玄幻(傳奇)
3!=軍事歷史
4!=遊戲原畫
1!=原創
3=**
snk17173
3!=東方玄幻(傳奇)
3!=軍事歷史
4!=遊戲原畫
1!=原創
3!=**
snk17173
3!=東方玄幻(傳奇)
如果我想替換除第一列外其他所有列中的3為字元a:
sed: cat test8.txt | sed 's/\(^[^\t]*\t\)3/\1a/g'
此處是ok的,但是如果換為1,就出問題了;cat test8.txt | sed 's/\(^[^\t]*\t\)*1/\1a/g';此處第一列中的1也被替換。
根據高手指點,此處用gensub做固定列以外的字元替換很ok。
gensub:cat test8.txt | awk '{printf $1" ";for(i=2;i這裡面有個很有意思的細節,print c 這個起到了換行的作用,而且c換成其他的字元也是同樣的效果!
總結:sed在簡單的全域性正則替換上有優勢,而gensub在部分列的區域性替換有優勢。
vim替換功能
range s pattern string c,e,g,i 5.1 range指的是範圍,1,7 指從第一行至第七行,1,指從第一行至最後一行,也就是整篇文章,也可以 代表。還記得嗎?是目前編輯的文章,是前一次編輯的文章。pattern就是要被替換掉的字串,可以用 regexp 來表示。strin...
VIM替換功能
1 替換 substitute range s pattern string c,e,g,i 5.1 range 指的是範圍,1,7 指從第一行至第七行,1,指從第一行至最後一行,也就是整篇文章,也可以 代表。還記得嗎?是目前編輯的文章,是前一次編輯的文章。pattern 就是要被替換掉的字串,可以...
vim替換功能
vim中可以在底行模式 命令列模式 使用s命令替換字串。語法為 addr s 源字串 目的字串 option 全域性替換命令為 s 源字串 目的字串 g addr 表示檢索範圍,省略時表示當前行。addr 搜尋範圍 m,n 表示從第m行到n行,例如 1,20s old new g 從第一行到第20行...