【轉】原文鏈接:http://blog.csdn.net/u011534057/article/details/58139769 【侵刪】
先舉個簡單的例子:
有個文件叫example.txt
內容為 aaa
使用sed命令刪除第一行
sed '$d' example.txt > example.txt
那么第一行就會被刪除了
現在需要對txt文件的每行行首加上絕對路徑,一開始編寫的shell腳本,提示更改成功了,但不知道還要將輸出進行重定向,於是換了vim打開文件進行修改。
1、首先,因為絕對路徑里包含/這樣的字符,可以使用\進行轉義,假定要修改的文件名為test.txt,要在行首加入字符/finetune_caviar/,shell腳本編寫如下:
sed 's/^/\/finetune_caviar\/&/g' test.txt
介紹下該命令:
(1)sed是一個很好的文件處理工具,本身是一個管道命令,主要是以行為單位進行處理,可以將數據行進行替換、刪除、新增、選取等特定工作,命令格式為:sed [-nefri] ‘command’ 文本名稱
(2)^表示行首
(3)\/表示使用\對字符/進行轉義
(4)g代表將每行出現的字符全部替換,如果想在特定字符處添加,g就有用了,否則只會替換每行第一個,而不繼續往后找了;
2、但是我在執行過上述命令后,只是進行了屏幕輸出,於是換成vim進行修改:
使用vim test.txt打開文件后,使用冒號(:)輸入命令:%s/^/\/finetune_caviar\/&/g
注:因為在文本編輯模式里不需要使用sed命令,也不需要指明文件名稱,自然表示命令的' '也是不需要的了。如果不加上%,則只對第一行進行替換。
3、將行首內容/finetune_caviar/替換為finetune:
shell腳本:sed “s/\/finetune_caviar\//\/finetune\//” test.txt > test_new.txt (此時不止進行了屏幕輸出,同時保存了更新過的文件為test_new.txt)
vim編輯:%s/\/finetune_caviar\//\/finetune\// ,或者g/\/finetune_caviar\//s//\/finetune\//
4、附sed的常用命令:
常用選項:
-n∶使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN的資料一般都會被列出到螢幕上。但如果加上 -n 參數后,則只有經過sed 特殊處理的那一行(或者動作)才會被列出來。
-e∶直接在指令列模式上進行 sed 的動作編輯;
-f∶直接將 sed 的動作寫在一個檔案內, -f filename 則可以執行 filename 內的sed 動作;
-r∶sed 的動作支援的是延伸型正規表示法的語法。(預設是基礎正規表示法語法)
-i∶直接修改讀取的檔案內容,而不是由螢幕輸出。
常用命令:
a ∶新增, a 的后面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
c ∶取代, c 的后面可以接字串,這些字串可以取代 n1,n2 之間的行!
d ∶刪除,因為是刪除啊,所以 d 后面通常不接任何咚咚;
i ∶插入, i 的后面可以接字串,而這些字串會在新的一行出現(目前的上一行);
p ∶列印,亦即將某個選擇的資料印出。通常 p 會與參數 sed -n 一起運作~
s ∶取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配正規表示法!例如 1,20s/old/new/g 就是啦!
舉例:(假設我們有一文件名為ab)
(1)刪除某行
[root@localhost ruby]# sed '1d' ab #刪除第一行
[root@localhost ruby] # sed '$d' ab #刪除最后一行
[root@localhost ruby] # sed '1,2d' ab #刪除第一行到第二行
[root@localhost ruby] # sed '2,$d' ab #刪除第二行到最后一行
(2)顯示某行
. [root@localhost ruby]# sed -n '1p' ab #顯示第一行
[root@localhost ruby] # sed -n '$p' ab #顯示最后一行
[root@localhost ruby] # sed -n '1,2p' ab #顯示第一行到第二行
[root@localhost ruby] # sed -n '2,$p' ab #顯示第二行到最后一行
(3)使用模式進行查詢
[root@localhost ruby] # sed -n '/ruby/p' ab #查詢包括關鍵字ruby所在所有行
[root@localhost ruby] # sed -n '/\$/p' ab #查詢包括關鍵字$所在所有行,使用反斜線\屏蔽特殊含義
(4)增加一行或多行字符串
[root@localhost ruby]# cat ab
Hello!
ruby is me,welcome to my blog.
end
[root@localhost ruby] # sed '1a drink tea' ab #第一行后增加字符串"drink tea"
Hello!
drink tea
ruby is me,welcome to my blog.
end
[root@localhost ruby] # sed '1,3a drink tea' ab #第一行到第三行后增加字符串"drink tea"
Hello!
drink tea
ruby is me,welcome to my blog.
drink tea
end
drink tea
[root@localhost ruby] # sed '1a drink tea\nor coffee' ab #第一行后增加多行,使用換行符\n
Hello!
drink tea
or coffee
ruby is me,welcome to my blog.
end
(5)代替一行或多行
[root@localhost ruby] # sed '1c Hi' ab #第一行代替為Hi
Hi
ruby is me,welcome to my blog.
end
[root@localhost ruby] # sed '1,2c Hi' ab #第一行到第二行代替為Hi
Hi
end
sed 's/^/添加的頭部&/g' //在所有行首添加
sed 's/$/&添加的尾部/g' //在所有行末添加
sed '2s/原字符串/替換字符串/g' //替換第2行
sed '$s/原字符串/替換字符串/g' //替換最后一行
sed '2,5s/原字符串/替換字符串/g' //替換2到5行
sed '2,$s/原字符串/替換字符串/g' //替換2到最后一行
sed '.,$s/原字符串/替換字符串/g' //替換當前行到最后一行
(6)替換一行中的某部分
格式:sed 's/要替換的字符串/新的字符串/g' (要替換的字符串可以用正則表達式,末尾加g替換每一個匹配的關鍵字,否則只替換每行的第一個)
sed -n '/ruby/p' ab | sed 's/ruby/bird/g' #替換ruby為bird
sed -n '/ruby/p' ab | sed 's/ruby//g' #刪除ruby
替換樣式可以多個在同一條命令中執行,用分號”;”分隔:
sed 's/^/添加的頭部&/g;s/$/&添加的尾部/g' //同時執行兩個替換規則
(7)插入
sed -i '$a bye' ab #在文件ab中最后一行直接輸入"bye"
sed -i '1i'$first ab#在文件ab中第一行插入變量$first作為一行,這里注意1和i之間可以有空格,但是$first前不能有空格
(8)刪除匹配行
sed -i '/匹配字符串/d' filename (注:若匹配字符串是變量,則需要“”,而不是‘’。記得好像是)
(9) 替換匹配行中的某個字符串:
sed -i '/匹配字符串/s/替換源字符串/替換目標字符串/g' filename
(10)sed處理過的輸出是直接輸出到屏幕上的,要保存可以將輸出重定向,或者使用參數”i”直接在文件中替換:
sed -i 's/原字符串/替換字符串/g' filename //替換文件中的所有匹配項
注:為了避免/的歧義。可以使用?、#、+等其他字符來代替/作為命令的分隔符。
5、附vim常用命令
光標控制命令
k 向上移一行
j 向下移一行
h 向左移一個字符
l 向右移一個字符
gg 移到文件的首行
G 移到文件的末行
H 移到屏幕的第一行
w 移到下一個字的開頭
W 移到下一個字的開頭,忽略標點符號
e 移到下一個字的結尾
E 移到下一個字的結尾,忽略標點符號
^ 移到當前行首
$ 移到當前行尾
{ 移到上一段開頭
} 移到上一段結尾
Enter 移到下一行行首
在 vim 中添加文本
命令 插入
i 在光標前插入文本
I 在當前行首插入文本
a 在光標后插入文本
A 在當前行末插入文本
o 在當前行的下邊插入新行
O 在當前行的上邊插入新行
s 刪除光標所在處字符,並進入插入模式
S 刪除光標所在的行,並進入插入模式
:r filename 讀入指定文件內容,並插在當前行后
:nrfile 讀入文件 file 內容,並插在第 n 行后
Esc 回到命令模式
在 vim 中刪除文本
命令 刪除
x 刪除光標處的字符
db 刪除光標前面的字
dw 刪至下一個字的開頭
dd 刪除整行
:n,md 從第 m 行開始往前刪除 n 行
d$ 從光標處刪除到行尾
d^ 從光標處刪除到行首
在 vim 中查找與替換
命令 查找與替換
/target 在文件中向前查找 target
?target 在文件中向后查找 target
n 查找下一個
N 查找上一個
:setic 查找時忽略大小寫
:setnoic 查找時對大小寫敏感
%s/text1/text2/g 在整個文件中查找text1並且替換為text2
在 vim 中復制文本
命令 復制
yy 復制當前行
nyy 從當前開始復制n行
p 粘貼至光標前
P 粘貼至光標后
u 撤消上一次修改
U 撤消所有修改
保存與退出vim
命令 保存或退出
:w 保存文件但不退出
:wfile 將修改保存在 file 中但不退出
:wq 或 ZZ或:x 保存文件並退出
:q! 不保存文件,強制退出
:e! 放棄所有修改,從上次保存文件開始再編輯
其他選項
選項 作用
:setall 查看所有選項
:setnu 設置行號
:setshowmode 顯示是輸入模式還是替換模式
:set ts=4 為文本輸入設置 tab stops
:setnonumber 取消顯示行數
:.= 查看當前行的行號
:= 查看總行數
ctrl+g 顯示文件名、當前的行號、文件的總行數和文件位置的百分比
參考:http://www.jb51.net/LINUXjishu/155122.html
http://blog.sina.com.cn/s/blog_4ce89f200100vkb5.html
http://www.cnblogs.com/afant/archive/2009/03/11/1408745.html