文本處理工具sed、vim

文本處理工具sed、vim

一、sed的使用

1、sed的概念

sed簡單地說sed是一種行處理工具。

sed 是一種流性的行編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space ),接著用sed 命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。Sed 主要用來自動編輯一個或多個文件, 簡化對文件的反復操作,編寫轉換程序。

2、sed的用法

  用法:sed [option]… 'script' inputfile…

v常用選項:

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

-e: 多點編輯

-f / PATH/TO/SCRIPT_FILE :  從指定文件中讀取編輯腳本

-r: 支持使用擴展正則表達式

-i: 原處編輯

 script:地址命令

地址界定

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

  (2)單地址:#:指定的行

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

   (3)地址范圍:

     #,# 某行到某行

     #,+#某行至某行的基礎上加幾行

      /pat1/,/pat2/  pat1第一次匹配到的行至被pat2第一次匹配到的行之間

      #,/pat1/  某行至被/pat1第一次匹配到的行。

    (4~:步進

       1~2奇數行

       2~2偶數行

編輯命令:

   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使用范例:

sed 2p/etc/passwd

sed n 2p/etc/passwd

sed n 1,4p/etc/passwd

sed n /root/p/etc/passwd

sed n 2,/root/p/etc/passwd  2 行開始

sed -n /^$/=file  顯示空行行號

sed n e /^$/p’ –e /^$/=file

sed /root/a\superman/etc/passwd 行后

sed /root/i\superman/etc/passwd  行前

  +sed /root/c\superman/etc/passwd 代替行

sed /^$/dfile

sed 1,10dfile

nl /etc/passwd | sed 2,5d

nl /etc/passwd | sed 2a tea

sed 's/test/mytest/g' example

sed ns/root/&superman/p/etc/passwd  單詞后

sed ns/root/superman&/p/etc/passwd  單詞前

sed -e s/dog/cat/-e s/hi/lo/pets

sed i.bak s/dog/cat/gpets

3、sed高級編輯模式

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

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

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

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

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

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

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

d:  刪除模式空間中的行

D :刪除 當前模式空間開端至\n 的內容(不在傳至標準輸

出),放棄之后的命令,但是對剩余模式空間重新執行sed

sed 示例

 sed -n 'n;p' FILE

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

 sed '$!N;$!D' FILE

 sed '$!d' FILE

 sed GFILE

 sed gFILE

 sed /^$/d;GFILE

 sed 'n;d' FILE

 sed -n '1!G;h;$p' FILE

 

 

 

編輯文本工具vim

一、編輯工具介紹

   vi: Visual Interface ,文本編輯器

  文本:ASCII, Unicode

  文本編輯種類:

    行編輯器: sed

    全屏編輯器:nano, vi

    vim – Vi Improved

  其他編輯器:

    gedit

    一個簡單的圖形編輯器

    gvim

一個 Vim 編輯器的圖形版本

二、文件的打開與關閉

 文件打開

# vim  [OPTION]… FILE…

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

+/ PATTERN :打開文件后,直接讓光標處于第一個被

PATTERN 匹配到的行的行首

vim + file  直接打開file, 光標在 最后一行

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

vim d file1 file2… 比較多個文件

vim -m file 只讀打開文件

 ex file 或 或 vim e 直接進入ex 模式

 如果該文件存在,文件被打開并顯示內容

如果該文件不存在,當編輯后第一次存盤時創建它

文件關閉

  擴展模式:

:q  退出

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

:wq  保存退出

:x  保存退出

v命令模式

ZZ:  保存退出

ZQ:不保存退出

三、模式的轉換

命令模式 –>  插入模式

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

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

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

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

o:  在當前光標所在行的下方打開一個新行

O :在當前光標所在行的上方打開一個新行

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

四、擴展模式

  按“: ”進入Ex 模式

創建一個命令提示符:, 處于底部的屏幕左側

命令:

w  寫(存)磁盤文件

wq  寫入并退出

x  寫入并退出

q 退出

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

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

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

!command  在此模式下仍可執行別的命令

r!command  將執行的別的命令的結果輸入到vim編輯的窗口中

  地址定界

:start_pos,end_pos

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

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

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

: :2,+3 表示2 5行 行

.:  當前行

$:  最后一行

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

% :全文,  相當于1,$

 /pat1/,/pat2/

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

pat2 匹配到的行結束

#,/pat/

/pat/,$

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

d

y

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

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

23

擴展模式:查找

  查找

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

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

n :與命令同方向

N:  與命令反方向

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

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

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

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

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

個內容

修飾符:

i:  忽略大小寫

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

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

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

s@/etc@/var@g

s#/boot#/#i

撤銷更改

u 撤銷最近的更改

#u 撤銷之前多次更改

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

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

 .  重復前一個操作

 n. 重復前一個操作n

五、命令模式

 1、命令模式光標跳轉

v  字符間跳轉:

h: 左 左 l: 右 右 j: 下 下 k: 上 上

#COMMAND :跳轉由# 指定的個數的字符;

v  單詞間跳轉

w :下一個單詞的詞首

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

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

#COMMAND :由# 指定一次跳轉的單詞數

v  當前頁跳轉

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

v  行首行尾跳轉

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

0:  跳轉至行首

$:  跳轉至行尾

v  行間移動

#G 、擴展 模式:#  :跳轉至由# 指定行

G :最后一行

1G, gg:  第一行

v  句間移動

) :下一句 ( :上一句

v  段落間移動

}: 下一段 {

   翻屏操作

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

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

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

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

2、命令行字符操作

  字符編輯

x:  刪除光標處的字符;

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

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

~: 轉換大小寫

v替換命令(r, replace)

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

R: 切換成REPLACE

  刪除命令

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

d$:  刪除到行尾

d^: 刪除 到非空行首

d0: 刪除到行首

dw:

de:

db:

#COMMAND

 dd:  刪除光標所在的行

#dd :多行刪除

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

  復制命令(y, yank): :

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

y$

y0

y^

ye

yw

yb

#COMMAND

 yy :復制行

  #yy:  復制多行

y:復制整行

   改變命令(c, change)

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

 命令模式 –>  插入模式

c$

c^

c0

cb

ce

cw

#COMMAND

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

#cc:

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

 100iwang [ESC]  粘貼“wang 100次 次

 <start position><command><end position>

 Command:

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

如 例如 0y$  命令意味著:

0 → →  先到行頭

y → →  從這里開始拷貝

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

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

六:vim寄存器

有 有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  面向塊

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

w ,

, ) )  ,

}

,箭頭等

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

多窗口模式

多文件分割

vim -o|-O FILE1 FILE2 …

-o:  水平分割

-O:  垂直分割

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

  單文件窗口分割:

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

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

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

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

wqall 退出

定制vim 的工作特性

  配置文件:永久有效

全局:/etc/vimrc

個人:~/.vimrc

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

 (1)  行號

顯示:set number,  簡寫為set nu

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

 (2)  括號成對匹配

匹配:set showmatch,  簡寫為set sm

取消:set nosm

33

定制vim 的工作特性

 (3)  自動縮進

啟用:set ai

禁用:set noai

 (4)  高亮搜索

啟用:set hlsearch

禁用:set nohlsearch

 (5)  語法高亮

啟用:syntax on

禁用:syntax off

 (6)  忽略字符的大小寫

啟用:set ic

不忽略:set noic

34

置 配置 vi and vim

 (7)  文件格式

啟用: :fileformat=unix

不忽略: : fileformat=dos

(8)  設置文本寬度

:set textwidth=65 (vim only)

:set wrapmargin=15

:help option-list

:set or :set all

 

 

 

 

 

 

 

 

 

 

 

 

 

 

實用場景

一、更改與備份

使用sed進行文件修改時,如要備份可以使用.bak。

例如:sed  -i.bak  /^U/r /etc/issue  f3/etc/issue的文件內容寫入f3,并作更改,f3.bak是更改之前的備份文件。

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

(0)
178babyhanggege178babyhanggege
上一篇 2016-08-11
下一篇 2016-08-11

相關推薦

  • LAMP

    練習:編譯安裝amp,提供兩個基于主機名的虛擬主機      (1) https, 部署pma      (2) 部署wordpress 編譯安裝: mariadb: # wget 10.1.0.1:/pub/Sources/7.x86_64/mariadb/…

    Linux干貨 2016-10-12
  • 磁盤分區、軟RAID創建及shell腳本參數傳遞,for循環,運算表達式應用 1、創建一個10G分區,并格式為ext4文件系統。 先使用fdisk工具創建一個10G的新分區。使用fdisk打開要創建磁盤分區的物理設備fdisk /dev/sdb,然后使用n指令創建新的分區,分區類型選此處選擇為主分區,第一個柱面使用默認的1,最后的柱面,使用+10G這種表示方…

    Linux干貨 2016-12-26
  • 網絡班N22期第三周博客作業

    一、列出當前系統所有已經登錄的用戶名,且同一個用戶登錄多次只顯示一次 [root@bogon ~]# w  15:17:44 up 15:28,  2 users,  load average: 0.00, 0.00, …

    Linux干貨 2016-08-29
  • netstat

    netstat命令 netstat 命令用于顯示各種網絡相關信息,如網絡連接,路由表,接口狀態 (Interface Statistics),masquerade 連接,多播成員 (Multicast Memberships) 等等 1 常用選項: -a :(all)顯示所有選項,默認不顯示LISTEN相關 -t :(tcp)僅顯示tcp相關選項 -u :(…

    Linux干貨 2017-05-07
  • N22-妙手-第一周博客作業

           描述計算機的組成及其功能 1946年馮諾依曼提出馮 諾依曼結構,也稱普林斯頓結構,即一種將程序指令存儲器和數據存儲器合并在一起的存儲器結構。根據他的結構,計算機組成是: (1)運算器:負責數據的算術運算和邏輯運算 (2)控制器:  負責對程序信息和數據進行分析,控制并協調其輸…

    Linux干貨 2016-08-15
  • 訪問控制列表ACL

     ACL是Access Control List的縮寫,主要的目的是提供傳統的owner、group、others的read、write、execute權限之外的具體權限設置。ACL可以針對單一用戶、單一文件、單一目錄來進行r、w、x的權限設置,對于需要特殊權限的使用狀況非常有幫助。使用getfacl和setfacl來設置查看acl的權限。ACL權…

    Linux干貨 2016-08-07

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-12 11:56

    內容很詳細,希望下次能用心排下版哦,字體統一起來看起來也標準一點吶

欧美性久久久久