shell替換功能

2021-06-28 07:49:34 字數 1015 閱讀 8394

據了解,替換功能有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行...