sed 高級編輯命令、模式空間、保持空間、vi 可視化模式、vimrc、地址定界

sed 高級編輯命令、模式空間、保持空間、vi 可視化模式、vimrc、地址定界

sed(stream deitor):行編輯器

【概述】sed是一種流式編輯器,它一次處理一行內容。處理時,把當前處理的行的所有內容存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,逐行處理,不修改文件。sed主要用于處理多個文件,簡化對文件的反復操作,編寫轉換程序等。
  • 用法:sed 【option】… ‘script’ file…

  • 【option】

    • -n:關閉模式空間內容的自動輸出,默認輸出全文包括修改的行,注意使用場合,如除了p命令外,需要顯示除了被匹配的模式外的內容時不用

    • -e:多點編輯,合并處理

    • -f /Path/file:從指定文件中讀取腳本,調用腳本,不用加引號

    • -r:支持擴展的正則表達式

    • -i:原處編輯,修改文件 sed -i.bak ‘3a\sss’ file #創建備份

  • 【script】

    • 地址定界:# #,# +# /pat1/,/pat2/ /^$/匹配多行的空行

    • ~步進:1~2奇數行 2~2偶數行

  • 【編輯命令】

    • p: 顯示模式空間中被修改的行

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

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

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

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

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

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

    • = 為模式空間中的行的下方打印行號

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

  • 【查找與替換】

    • s/ / /:可用@、#代替 / 號

    • s/pattern/&new&/p:在查找內容追加,&代表pattern

    • g:行內全局替換

    • p:顯示替換成功的行

    • w /Path/to/where:替換成功的行保存至文件中

  • 【命令操作】

    • sed -n ‘2,+2p’ file #2到4行的內容

    • sed -n ‘/abc/p’ file #包含abc的行

    • sed -n ‘2,/abc/p’ file #2到被模式匹配的行

    • sed ‘2i\s\nss’ file #2行后面插入多行

    • sed ‘2a\s\nss’ file #2行后面追加多行

    • sed ‘2c\word’ file #改變2行內容

    • sed -n ‘/abc/=’ file #顯示abc所在的行號,無內容

    • sed -n -e ‘/^abc/p’ -e ‘/^abc/=’ #顯示abc開頭的行號和內容

1.jpeg

    • sed -n ‘/^$/=’ file #顯示空行行號

    • sed -n -e ‘/^$/p’ -e ‘/^$/=’ file #在空行下方行號

    • sed ‘/^$/d’ file #去除空行

    • sed ‘s/oldword/replace/g’ file #替換每一行中需要替換的內容

    • sed -n ‘s/root/&superman/p’ /etc/passwd #單詞后追加,顯示被修改的行

    • sed -n‘s/root/superman&/p’ /etc/passwd #單詞前追加

    • sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets #顯示全文包括修改的行

    • sed -i.bak ‘s/dog/cat/g’ pets #創建備份文件,并修改文件內容

  • 【高級編輯命令】

    • sed -n ‘n;p’ file #把模式空間中的內容覆蓋至保持空間中

    • sed ‘1!G;h;$!d’ file #除了第一行都覆蓋模式空間;覆蓋到保持空間;刪除模式空間行:倒序

    • sed ‘$!N;$!D’ file #讀兩行;刪除多行模式空間:最后兩行

    • sed ‘G’ file #追加單行模式空間:增加空行

    • sed ‘g’ file #覆蓋模式空間:替換空行

    • sed ‘/^$/d;G’ file #刪除空行;追加模式空間:兩空行

    • sed ‘n;d’ file #讀取下一行并覆蓋;刪除模式空間行(無-n顯示模式空間d刪除模式空間行就跳過了一行):顯示奇數行

    • sed -n ‘1!G;h:$p’ #除了第一行都覆蓋模式空間;覆蓋保持空間;顯示修改過程

【總結】:sed是流式的編輯器,每次讀取一行到模式空間再處理,因此不會對原文件操作。當模式空間的行被修改過可用p進行指定,-n關閉模式空間的自動打印,這樣就實現了特定的匹配;無-n與p就實現了模式空間內容全部打印,如使用d刪除某匹配的行再打印。除了模式空間sed還存在保持空間,通過高級編輯命令對模式空間與保持空間的覆蓋、追加、刪除等操作實現了較為復雜的文本處理如:文本倒序、郵件信息處理等等

vi(visual interface)編輯器

  • .swap文件 

    • vi打開一個文件時會產生一個同名的.swap文件,時刻記錄用戶操作,正常退出則會刪除.swap文件。如果非正常退出則下次打開此文件時以readonly打開并出現上圖提示??赏ㄟ^刪除swap文件或者在/etc/vimrc文件添加 set noswapfile 

    • 2.jpeg

  • 打開文件 

    • vi +# file #定位

    • vi + file #最后一行

    • vi +/pattern file #定位到第一個模式所在行

    • vi -b hexfile #hex文件

    • vi -d file1 file2 #比較打開多個文件,高亮顯示不同處

    • vi -m file #只讀方式打開

    • gf #打開光標處文件名的文件,如main.c

    • ctrl ^ #切換到上次打開的文件。等于 :first

三種模式及轉換

  • 命令模式(command mode)(默認):主要是查看文件內容,控制屏幕光標的移動,字符、字或行的刪除,移動復制某區段及進入Insert mode下,或者到external mode

    • ctrl s | ctrl q #鎖定了,無反應,q解鎖

    • shift ~ #小寫變大寫,小寫變大寫

    • shift # #高亮向上找當前光標相同的單詞

    • shift * #高亮向下找相同單詞,noh取消高亮

    • shift zz #(ZZ)保存并退出,ZQ不保存退出

    • 翻頁(屏幕):ctrl d(下半) ctrl u(上半) ctrl f(下一屏) ctrl b(上一屏) PgUP

    • 翻頁(光標):zt(光標行滾動到第一行) zz(光標行滾中間) zb(光標行滾底- 端) #zt(第#行滾到第一行) #zz #zb

    • 單詞跳轉:w下首 e下尾 b當前、上首

    • 光標移動:arrow j、k、h、l

    • 光標定位(行內):0 ^ $

    • 光標定位(配對):% #跳轉到匹配的) ] }

    • 光標定位(行內字符):f_(定位到本行第一個) F(往前定位到_)

    • 光標定位(全文):#G(第#行) gg(第1行) G(末行) H\M\L(當前屏的第一行個、中間、最后一行的第一個位置)

    • 光標定位(句子):shift( #上一句 shift ) #下一句

    • 光標定位(屏幕行):g(arrow j k ^ $) #當句子太長時,屏幕行非常方便

    • 光標定位(段落):shift } #下一段 shift } #下一段

    • 光標定位(函數): [[ #上一個函數 ]] #下一個函數

    • 光標書簽設置及跳轉:m a-z #設置光標書簽,用26個字母表示 ` a-z 跳轉到書簽

    • 增加縮進:可配合可視化選擇 >增加縮進 <減少縮進

    • 刪除命令:d(^ $ 0 w e b ( { ) } gg 1G G)解釋一下(行第一個可見字符、行尾、行首、下一個單詞首、下一個單詞尾、當前或上一個單詞首、上一句、上一段、下一句、下一段、文首、文末) dd(刪除當前行) D(刪除之行尾)=d$

    • 剪切命令:x(單個字符) #x(光標開始#個字符) xp(交換當前x內容到下一個字符之后)

    • 刪除、剪切、改變命令,存放在數字1寄存器中

    • 替換字符:R(整行) r(單個字符)

    • 復制命令:y(^ $ 0 w e b ( { ) } gg 1G G)

    • 粘貼命令:p光標之后 P光標之前(粘貼單詞時用P從行首復制,單詞完整)

    • 配對的符號操作:先進入該配對符號中再執行以下命令

    • 更改內容:ci【’ ” ( { [ <】

    • 刪除內容:di【’ ” ( { [ <】

    • 復制內容:yi【’ ” ( { [ <】

    • 選中內容:vi【’ ” ( { [ <】

3.jpeg

    • 命令模式輸入數字,進入插入模式輸入字符,ESC…… #重復n次輸入

    • # y|d|gU|gu #如0y$ 表示從本行開頭到末尾的復制,gU變大寫,gu變小寫

    • u撤銷 ctrl r重做 #u撤銷#次

    • U撤銷光標落在這行后所有對此行的更改

  • 插入模式(insert mode):vi被運行時,通常處在命令模式下,鍵入以下命令可以使vi退出命令模式,進入插入模式(命令模式 ——> 插入模式):

    • I(i)行首與當前位置、A(a)行尾與當前位置、O(o)上行與下行

    • S #刪除一行并進入insert模式

    • s #刪除當前光標字母進入insert模式

    • 數字 s (arrow h、j、k、l)刪除光標之后的#個字母

    • cc #刪除一行并進入insert模式

    • 改變字符:c($ ^ 0 c w e b ( { ) } gg 1G G) 數字 c(arrow 、h、j、k、l) #刪除并進入插入模式

  • 擴展模式(external command):ex file 或 vi -e 直接進入ex模式。可將文件保存或退出vi,也可以設置編輯環境,如尋找字符串、列出行號……不過一般我們在使用時把vi簡化成兩個模式,就是將擴展模式(external mode)也算入命令行模式(command mode)

    • :wq : x ZZ

    • :r file

    • :w filename #另存為

    • !command #執行命令

    • r!command #讀入命令的結果

    • :# #第幾行

    • 【地址定界】

    • start_pos,end_pos

    • 使用方式:后跟一個編輯命令d、y、w newfile(可 >> 追加至文件)、r file

    • # #具體行

    • #,+# #從前面的#行再加#行的范圍

    • . #當前行

    • % #全文,相當于 1,$

    • /pattern/,/pattern/ #模式匹配,從第一次被匹配到的行到pattern2被匹配的行

    • #,/pattern/ #模式匹配,從#行到pattern被匹配到的行

    • /pattern/,$ #從/pattern/到文末的行

    • 【查找】

    • /pattern #向下查找 n N

    • /?pattern #向上查找 N n

    • 【查找并替換】

    • s/find/replace/修飾符

    • i:忽略大小寫

    • g:全局替換,默認是替換每行第一次出現的

    • gc:全局替換,加提示

    • @、#代替分割符/ ,避免多次使用轉義

  • vim的寄存器

    • a-z,A-Z寄存器,0-9數字寄存器,”未命名寄存器(不指定時默認的register),-短刪除寄存器 

    4.jpeg

    • 命名寄存器:#”f yy表示復制#行到f寄存器中;而 “fp表示讀取粘貼;擴展模式:#put f 放置f寄存器內容到第5行

    • 數字寄存器,0存放最近復制的內容,1存放最近的刪除內容。當新的文本變更和刪除時,1轉存到2,2到3……不同會話不能共享內容

    • 查看寄存器內容在擴展模式 :register f #顯示寄存器內容 

    5.jpeg

  • vim編輯二進制文件

    • vim -b binfile #打開二進制文件

    • 在擴展命令模式下,利用 :%!xxd 轉換打開的2進制文件為16進制可讀文件,修改之后 :%!xxd -r返回再退出

  • 可視化模式

    • v #字符可視化模式(characterwise visual mode),選擇的單位是字符

    • gv #選中上次可視化模式時選擇的文本

    • V #行可視化模式(Linewise visual mode),選擇的單位是行

    • Ctrl V #塊可視化模式(Blockwise visual mode),選擇單位是塊

    • 切換可視化模式:在命令模式下v或V或ctrl v進入可視化模式,在v可視化模式ctrl v- 進入塊可視化,Esc等待1秒退出

    • 在可視化模式下編輯:在可視化模式下可完成刪除、復制、~大小寫轉換、>增加縮進、J合并為一行、w newfile另存為、sort排序

  • vim 多個窗口

    • vim file1 file2 file3多文件模式

    • :next :prev :first :last ctrl ^

    • :wall :qall :wqall

  • 多個文件分割

    • vim -(O)o file1 file2……

    • ctrl w + arrow

  • 單個文件分割

    • ctrl w+s #水平分割多次

    • ctrl w+v #垂直分割多次

    • ctrl w+q #取消相鄰的,ctrl w+o取消其他所有的

  • vim配置文件

    • 個人:~/.vimrc #默認不存在的配置文件,打開vim時自動加載

    • 全局:/etc/vimrc

    • 設置vim的工作特性

    • 行號:set【nu(number),nonu】

    • 括號匹配:set【sm(showmatch),nosm】

    • 自動縮進:set【ai,noai】

    • 高亮搜索:set【hlsearch,nohlsearch】,取消也可以noh

    • 語法高亮:【syntax on,syntax off】

    • 忽略大小寫:set【ic,noic】

    • 文件格式:【fileformat=nuix,fileformat=dos】

    • 文本寬度:set【textwidth=65,wrapmargin=15】

    • 自動縮進寬度:set【shiftwidth=4】

    • 拼寫檢查:set 【spell,nospell】

    • :h(help)

    • :set (set all) #全部set topic

    • :h topic

    • vimtutor #tutor

練習

8.9練習.jpg

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

(0)
hellochelloc
上一篇 2016-08-11 09:37
下一篇 2016-08-11 09:37

相關推薦

  • 9月9日,系統啟動文件恢復與內核編譯

    1、破解root口令,并為grub設置保護功能 進入grub界面,輸入a鍵,在輸入1,進入單用戶界面,進入系統后修改密碼。 2、破壞本機grub stage1,而后在救援模式下修復之 3、刪除vmlinuz和initramfs文件,無法啟動,恢復之 (1)安裝kernel內核 (2)光盤尋找內核,在復制到/boot目錄下,在修改成對應的,系統會重啟兩次 (3…

    Linux干貨 2016-09-13
  • N21天天第十三周課程練習

    1、建立samba共享,共享目錄為/data,要求:(描述完整的過程)   1)共享名為shared,工作組為magedu;   2)添加組develop,添加用戶gentoo,centos和ubuntu,其中gentoo和centos以develop為附加組,ubuntu不屬于develop組;密碼均為用戶名;   3)添加s…

    Linux干貨 2016-12-05
  • shell編程之變量,數值計算,字符比較,文件測試小記

     變量     變量:能儲存計算結果或能表示值抽象概念,其指向的內存空間中一段地址。        變量賦值:name=value    溢出:字符超過定義內存中間大小    變量類型:數據類型,存儲的格式,參與的運算   &nb…

    Linux干貨 2016-08-15
  • read,locate ,find 的總結及相關聯系

    read 變量名 read 變量名1 [變量名2] < 文件名不支持管道read 變量名1 [變量名2] <<< “值1 [值2] …”使用read來把輸入值分配給一個或者多個shell變量     -p 指定要顯示的提示     # read -p…

    Linux干貨 2017-08-12
  • keepalived的初級使用

        1、雙主模型的ipvs高可用   一、雙主模型的ipvs高可用     1)網絡結構圖       2)、ipvs的類型是dr模型,調度算法是rr       RS1和RS2都是centos6.8 對RS1和RS2的配置:…

    Linux干貨 2017-05-15
  • memcache

      memcached: memcached is a high-performance, distributed memory object caching system, generic in nature, but&nbsp…

    Linux干貨 2016-11-01
欧美性久久久久