0809linux基礎小記(sed和vim用法)

sed  [options] ‘scripts’ inputfile

-n: 不輸出模式空間內容的自動打印

-e: 多點編輯

-f:從指定文件中讀取編輯腳本

-i:原處編輯

scripts

地址命令

地址定界:

(1)  不給地址:對全文進行處理

(2)  單地址:

#:  指定的行

: sed '2d' f1  //刪除第2

/pattern/ :被此處模式所能夠匹配到的每一行

: sed -n '/^r/p' /etc/passwd   //打印以r開頭的行

blob.png

(3)  地址范圍:

#,#

: sed -n '9,12p' /etc/fstab  //打印第9~12

blob.png

#,+#

: sed -n '3,+4p' /etc/fstab  //打印從第3行開始,加后面的4

blob.png

/pat1/,/pat2/

: sed -n '/^root/,/^b/p' /etc/passwd  //打印以root開頭的行到以b開頭的行

blob.png

#,/pat1/

:sed -n '8,/^S/p' /etc/sysconfig/sshd   //打印第8行至以S開頭的行

blob.png

(4) ~ :步進

1~2  奇數行

sed -n '1~2p' file   //顯示奇數行

blob.png

2~2  偶數行

sed -n '2~2p' file   //顯示偶數行

blob.png

 

 

 

  編輯命令:

d:  刪除模式空間匹配的行

p:  顯示模式空間中的內容

a \text :在行后面追加文本;支持使用\n 實現多行追加

i \text :在行前面插入文本;支持使用\n 實現多行插入

c \text :替換行為單行或多行文本

w /path/to/somefile:  保存模式匹配的行至指定文件

r /path/from/somefile :讀取指定文件的文本至模式空間中匹配到的行后

=:  為模式空間中的行打印行號

!: 模式空間中匹配行取反處理

 

s/// :查找替換, 支持使用其它分隔符,s@@@ ,s### 替換標記:

g:  行內全局替換

p:  顯示替換成功的行

w  /PATH/TO/SOMEFILE :將替換成功的行保存至文件中

 

:

sed -n -e '/export/p' -e '/^$/=' ~/.bash_profile

blob.png

 

sed '/root/a\hero\n\a\king' /etc/passwd|head -5

blob.png

 

 

sed '/root/i\superman' /etc/passwd|head -5

blob.png

sed '/^root/c\superman' /etc/passwd|head -3

blob.png

nl /etc/passwd|sed '2a tea'

blob.png

sed -n 's/^root\b/king&/p' /etc/passwd   單詞補前綴

sed -n 's/^root\b/&king/p' /etc/passwd   單詞補后綴

blob.png

 

sed -i.bak '2d' /tmp/passwd    原處改文件,并生成備份

blob.png

  高級編輯命令:

h: 把模式空間中的內容覆蓋至保持空間中

H:把模式空間中的內容追加至保持空間中

g: 從保持空間取出數據覆蓋至模式空間

G:從保持空間取出內容追加至模式空間

x: 把模式空間中的內容與保持空間中的內容進行互換

n: 讀取匹配到的行的下一行覆蓋至模式空間

N:追加匹配到的行的下一行至模式空間

d: 刪除模式空間中的行

D:刪除當前模式空間開端至\n 的內容(不在傳至標準輸出),放棄之后的命令,但是對剩余模式空間重新執行sed

 

記憶:hhold,進入模式空間;gglobal,進入模式空間;小寫是覆蓋;大寫是追加

blob.png

sed '1!G;h;$!d' FILE  

1!G 第一行不執行G命令,從第二行開始執行從保持空間取出內容追加至模式空間

$!d 最后一行不刪除

blob.png

blob.png

命令執行結果是倒序排列,效果同tac命令

sed -n '1!G;h;$p' num  // 倒序打印,效果同上

 

echo {1..10} |tr ' ' '\n' >  num    //num文件是十行,分別顯示1~10

 

sed '$!N;$!D' num  // 打印倒數兩行

$!N 除最后一行,追加匹配到的行的下一行至模式空間

$!D 除最后一行,刪除當前模式空間開端至\n 的內容

blob.png

第一行1進模式空間,第一行的下一行(即第二行)2追加至模式空間,再模式空間中刪除操作;

第一行3進模式空間,第三行的下一行(即第四行)4追加至模式空間,再模式空間中刪除操作;

一直持續下去,直到第九行9進模式空間,第九行的下一行(即第十行)10追加至模式空間,

動作結束。此時模式空間中只有兩行,9、10.

 

 

sed '$!d' num       // 只留最后一行

sed 'G' num        // 每行后增加空行

sed 'g' num        // 顯示10個空行

sed '/^$/d;G' num   // 每行后有且只有一個空白行

sed 'n;d' num       // 打印奇數行

blob.png

 

 

sed -n 'n;p' num     // 打印偶數行

blob.png

sed  'n;p' num  輸出如下圖,包含顯示出了模式空間的內容,printp動作打印出的內容

blob.png

 

 

vim [OPTION] FILE

+# 打開文件直接讓光標處于第#行的行首

+/ PATTERN :打開文件后,直接讓光標處于第一個被PATTERN匹配到的行的行首

blob.png

vim + file 直接打開文件,光標在末行行首

vim b file  二進制方式打開文件

vim -m file 只讀打開文件

vim d file1 file2 比較多個文件    ctrl+兩下w,多文件之間切換

blob.png

 

三種主要模式

命令模式(默認):移動光標,剪切/ 粘貼文本

插入(編輯)模式:修改文本

擴展命令模式 :保存,退出等

Esc   退出當前模式

Esc Esc

 

命令模式 –>  插入模式

i: insert,  在光標所在處輸入

I :在當前光標所在行的行首 輸入

a: append,  在光標所在處后面輸入

A :在當前光標所在行的行尾 輸入

o:  在當前光標所在行的下方插入一個新行

O :在當前光標所在行的上方插入一個新行

插入模式 ESC命令模式

命令模式  :  >  擴展 模式

擴展模式 ESC > 命令模式

鎖定和解鎖:CTRL+s,Ctrl+q

 

擴展模式:

:q  退出

:q!  強制退出,丟棄做出的修改

:wq  保存退出

:x  保存退出

命令模式

ZZ:  保存退出

ZQ: 不保存退出

 

命令:

寫(存)磁盤文件

wq  寫入并退出

寫入并退出

q 退出

q!不存盤退出,即使更改都將丟失

r filename  讀文件內容到當前文件中

blob.png

w filename 將當前文件內容寫入另一個文件

blob.png

!command

blob.png

r!command

blob.png

 

字符間跳轉:

h:  l:  j:  k:

#COMMAND :跳轉由# 指定的個數的字符;如20l,右移20個字符

單詞間跳轉:

w :下一個單詞的詞首

e :當前或下一單詞的詞尾

b :當前或前一個單詞的詞首

#COMMAND :由# 指定一次跳轉的單詞數;如5e,往后移動5個詞

當前頁跳轉:

H :頁首   M :頁中間行   L: 頁底

 

行首行尾跳轉:

^:  跳轉至行首的第一個非空白字符;

0:  跳轉至行首

$:  跳轉至行尾

行間移動:

#G 、擴展模式:跳轉至由# 指定行;5G,跳到第5

G :最后一行

1G, gg:  第一行

句間移動:

) :下一句  ( :上一句

段落間移動:

}: 下一段  {: 上一段

 

Ctrl+f:  向文件尾部翻一屏

Ctrl+b:  向文件首部翻一屏

Ctrl+d:  向文件尾部翻半屏

Ctrl+u:  向文件首部翻半屏

 

字符編輯:

x:  刪除光標處的字符;

#x:  刪除光標處起始的# 個字符

xp:  交換光標所在處的字符及其后面字符的位置

~: 轉換大小寫

替換命令(r, replace)

r:  替換光標所在處的字符

R: 切換成REPLACE


刪除命令:

d:  刪除命令,可結合光標跳轉字符,實現范圍刪除;

d$: 刪除到行尾

d^: 刪除 到非空行首

d0: 刪除到行首

dw:

de:

db: 刪除前個詞

#COMMAND

dd:  刪除光標所在的行

#dd :多行刪除

D:從當前光標位置一直刪除到行尾 ,留空行,等同于d$

J: 將下一行拼接至本行

 

復制命令(y, yank)

y:  復制,行為相似于d 命令

y$

y0

y^

ye

yw

yb

#COMMAND

yy :復制行

#yy:  復制多行

Y: 復制整行

 

粘貼命令(p, paste)

p :緩沖區存的如果為整行,則粘貼當前光標所在行的下方;

否則,則粘貼至當前光標所在處的后面

P :緩沖區存的如果為整行,則粘貼當前光標所在行的上方;

否則,則粘貼至當前光標所在處的前面

改變命令(c, change)

c:  修改后切換成插入模式

命令模式 –>  插入模式

c$

c^

c0

cb

ce

cw

#COMMAND

cc :刪除當前行并輸入新內容

#cc:

C:刪除當前光標到行尾,并切換成插入模式

 

10igood [ESC]  粘貼“good 100

 <start position><command><end position>

 Command:

復制、刪除、gU  變大寫、gu  變小寫

例如 0y$  命令意味著:

0   先到行頭

y   從這里開始拷貝

$   拷貝到本行最后一個字符

ye  從當前位置拷貝到本單詞的最后一個字符

 

地址定界

:start_pos,end_pos

#:  具體第# 行,例如2 表示第2 行;

#,#:  從左側# 表示行起始,到右側# 表示行結尾

#,+#:  從左側# 表示的行起始,加上右側# 表示的行數

2,+3 表示2 5

.:  當前行

$: 最后一行

.,$-1  當前行到倒數第二行

% :全文相當于1,$

 

/pat1/,/pat2/

從第一次被pat1 模式匹配到的行開始,一直到第一次被pat2 匹配到的行結束

#,/pat/

blob.png

/pat/,$

使用方式:后跟一個編輯命令

d

y

w file:  將范圍內的行另存至指定文件中

r file:在指定位置插入指定文件中的所有內容

 

查找

/PATTERN :從當前光標所在處向文件尾部查找

?PATTERN :從當前光標所在處向文件首部查找

n:與命令同方向

N:與命令反方向

 

s:  在擴展模式下完成查找替換操作

格式:s/ 要查找的內容/ 替換為的內容/ 修飾符

要查找的內容:可使用模式

替換為的內容:不能使用模式,但可以使用\1, \2, …

等后向引用符號;還可以使用“&”引用前面查找時查找到的整個內容

修飾符:

i:  忽略大小寫

g:  全局替換;默認情況下,每一行只替換第一次出現

gc: 全局替換,每次替換前詢問

查找替換中的分隔符/ 可替換為其它字符,例如

s@/etc@/var@g

s#/boot#/#i

 


1.復制/etc/profile /tmp/ 目錄,用查找替換命令刪除/tmp/profile 文件中的行首的空白

 字符

 cp /etc/profile /tmp

 sed 's#^[[:space:]]\+##' /tmp/profile

 

2. 復制/etc/rc.d/init.d/functions 文件至/tmp 目錄,用查找替換命令為/tmp/functions 

 的每行開頭為空白字符的行的行首添加一個#

    cp /etc/rc.d/init.d/functions  /tmp

    vim /tmp/functions

    :%s@^[[:space:]]\+@#&@g

 

 

u 撤銷最近的更改

#u 撤銷之前多次更改

U  撤消光標落在這行后所有此行的更改

Ctrl – r 重做最后的“撤消”更改

重復前一個操作

n. 重復前一個操作n

 

 

26 個命名寄存器和1 個無命名寄存器,常存放不同的剪貼版內容,可以不同會話間共享。

a ,b,…,z 表示, 用“ 寄存器表示,放在數字和命令之間

如:3"tyy  表示復制3 行到t 寄存器中

"tp 表示將t 寄存器內容粘貼

未指定,將使用無命名寄存器

10 個數字寄存器,用0 ,1 ,… ,9 表示,0 存放最近復制內容,1 存放最近刪除內容。當新的文本變更和刪除時,1 轉存到2 2 轉存到3 ,以此類推。數字寄存器不能在不同會話間共享。

 

 

以二進制方式打開文件

vim -b binaryfile

擴展命令模式下,利用xxd 命令轉換為可讀的十六進制

:%!xxd

編輯二進制文件

擴展命令模式下,利用xxd 命令轉換回二進制

:%!xxd –r

保存退出

 

 

允許選擇的文本塊

v面向字符

V面向行

ctrl-v  面向塊

可視化鍵可用于與移動鍵結合使用:

w    }  箭頭等

突出顯示的文字可以被刪除,復制,變更,過濾,搜索 / 替換等

 

 

vim FILE1 FILE2 FILE3 …

:next  下一個

:prev  前一個

:first  第一個

:last  最后一個

:wall  保存所有

:qall  退出所有

:wqall

 

 

多文件分割

vim -o|-O FILE1 FILE2 …

-o:  水平分割

-O:  垂直分割

blob.png

在窗口間切換: Ctrl+w, Arrow

單文件窗口分割:

Ctrl+w,s: split,  水平分割

Ctrl+w,v: vertical,  垂直分割

ctrl+w,q :取消相鄰窗口

ctrl+w,o: 取消全部窗口

wqall 退出

 

 

配置文件:永久有效

全局:/etc/vimrc

個人:~/.vimrc

擴展模式:當前vim 進程有效

(1)  行號

顯示:set number,  簡寫為set nu

取消顯示:set nonumber,  簡寫為set nonu

(2)  括號成對匹配

匹配:set showmatch,  簡寫為set sm

取消:set nosm

(3)  自動縮進

啟用:set ai

禁用:set noai

(4)  高亮搜索

啟用:set hlsearch

禁用:set nohlsearch

(5)  語法高亮

啟用:syntax on

禁用:syntax off

(6)  忽略字符的大小寫

啟用:set ic

不忽略:set noic

(7)  文件格式

啟用: fileformat=unix

不忽略: fileformat=dos

(8)  設置文本寬度

:set textwidth=65 (vim only)

:set wrapmargin=15

 

:help option-list

:set or :set all

 

vi/vim 內置幫助

:help

:help topic

Use :q to exit help

vimtutor 練習冊

 

 

1.如何設置tab 縮進為4 個字符?

:set ts=4

2.復制/etc/rc.d/init.d/functions 文件至/tmp 目錄;替換/tmp/functions

文件中的/etc/sysconfig/init /var/log;

:%s@/etc/sysconfig/init@/var/log@g

blob.png

3.刪除/tmp/functions 文件中所有以# 開頭,且# 后面至少有一個空白字符的行的行首的#

:%s@^#\([[:space:]].*\)@\1@

 

原創文章,作者:victorycommander,如若轉載,請注明出處:http://www.www58058.com/33065

(0)
victorycommandervictorycommander
上一篇 2016-08-11
下一篇 2016-08-11

相關推薦

  • linux軟鏈接與硬鏈接的區別

    硬鏈接:相于當給文件增加了一個新名 在添加鏈接時會增加鏈接數,其inode結點數不會增加 支持絕對路徑與相對路徑 硬鏈接不能對目錄來創建 不能跨分區來創建鏈接 硬鏈接鏈接到文件被刪除時,依舊可以通過鏈接文件來訪問被刪文件的數據 軟鏈接:可以支持對目錄來創建鏈接 (注,當你用rm -rf 刪除目錄的時候,目錄不會刪除,但目錄中的內容會被刪除,并且會刪除源文件)…

    Linux干貨 2016-10-02
  • 第九周:shell腳本之判斷練習

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash # declare -i LoginUser=0 declare -i NologinUser=0 while r…

    Linux干貨 2016-11-21
  • 從增刪改查角度學習linux基礎命令

    從增刪改查角度學習linux基礎命令   本文從文件的增加、刪除、修改、查詢四個角度介紹linux的基本命令,介紹如下:   一.增 touch命令是最常用的創建文件的命令,它的常見參數如下: -a 或–time=atime或–time=access或–time=use  只更改存取時間。 -c 或&#…

    2017-07-15
  • fdisk命令

    fdisk命令用于觀察硬盤實體使用情況,也可對硬盤分區。

    2017-12-05
  • 大概認識linux

             linux簡介 其實對Linux系統不是很了解,都是在百度和谷歌搜索出來,才發現Linux很多版本。各版本各優缺點。首先簡單說下發展史,Linux在1991年10月5號(這是第一次正式向外公布的時間)在芬蘭誕生,以后借助于Internet網絡向全世界各地傳播,由計算機愛好者的再次開發新功能和…

    Linux干貨 2016-05-29
  • 第三周博客作業

      開始學習已經三周了,感覺到年底有些時間不夠,作業也交的越來越晚,需要加緊學習的進度了?! ?1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。  最簡單的實現題目要求的方法是使用cut命令只顯示用戶名并用sort命令排序去重: [root@localhost ~]# who |&nbs…

    Linux干貨 2016-12-20
欧美性久久久久