sed行首或者行末新增字串

2022-07-02 22:57:12 字數 1301 閱讀 1546

昨天寫乙個指令碼花了一天的2/3的時間,而且大部分時間都耗在了sed命令上,今天不總結一下都對不起昨天流逝的時間啊~~~

用sed命令在行首或行尾新增字元的命令有以下幾種:

假設處理的文字為test.file

在每行的頭新增字元,比如"head",命令如下:

sed 's/^/head&/g' test.file

在每行的行尾新增字元,比如「tail」,命令如下:

sed 's/$/&tail/g' test.file

執行結果如下圖:

幾點說明:

1."^"代表行首,"$"代表行尾

2.'s/$/&tail/g'中的字元g代表每行出現的字元全部替換,如果想在特定字元處新增,g就有用了,否則只會替換每行第乙個,而不繼續往後找了

例:3.如果想匯出檔案,在命令末尾加"> outfile_name";如果想在原檔案上更改,新增選項"-i",如(這裡的-i,可以理解為其他命令執行後的結果重定向到原檔案,所以-n p等引數會影響-i的效果)

4.也可以把兩條命令和在一起,在test.file的每一行的行頭和行尾分別新增字元"head"、「tail」,命令:sed '/./' test.file

以上其實都還ok,昨天花太多時間,主要因為被處理的檔案是用mysql從資料庫提取的結果匯出來的,別人給我之後我就直接處理,太腦殘了= -我一直有點懷疑之所以結果不對,有可能是windows和linux換行的問題,可是因為對sed不熟,就一直在搞sed。。。。。。。

眾所周知(= -),window和linux的回車換行之云云,如果你知道了,跳過這一段,不知道,讀一下唄:

unix系統裡,每行結尾只有「《換行》」,即「\n」;windows系統裡面,每行結尾是「《換行》《回 車》」,即「\n\r」。乙個直接後果是,unix系統下的檔案在windows裡開啟的話,所有文字會變成一行;而windows裡的檔案在unix下開啟的話,在每行的結尾可能會多出乙個^m符號。

好了,所以我的問題就出在被處理的檔案的每行末尾都有^m符號,而這通常是看不出來的。可以用"cat -a test.file"命令檢視。因此當我想在行尾新增字元的時候,它總是新增在行首且會覆蓋掉原來行首的字元。

要把檔案轉換一下,有兩種方法:

1.命令dos2unix test.file

2.去掉"\r" ,用命令sed -i 's/\r//' test.file

sed刪除行首和行尾空格或者TAB

例項 liujl liujl thinkpad edge e431 mybash test cat seddlt 2 every man s memory is his private literature.aldous huxley 4 life is really but we insist o...

vim行首加入或者刪除字元

使用按鍵 在行首新增字元 1.vim 檔名 2.ctrl v 進入列編輯模式,向下或向上移動游標,把需要注釋的行的開頭標記起來,3.然後按大寫的i,再插入注釋符,比如 4.再按esc,就會全部注釋了。在行首刪除字元 1.vim 檔名 2.按v,進入visual模式,橫向選中列的個數 如 注釋符號,需...

Qt之去除指定行首 行尾字元 串

去除行首指定字元 串 1.使用replace與正規表示式配合 qstring s testhello world s.replace qregexp test qdebug 2.使用left與remove介面 qstring s testhello world if s.left 4 test qd...