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模式??蓪⑽募4婊蛲顺鰒i,也可以設置編輯環境,如尋找字符串、列出行號……不過一般我們在使用時把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
下一篇 2016-08-11

相關推薦

  • 課堂練習及課后作業(0805文本處理工具)

    課堂練習: 1、找出ifconfig命令結果中本機的所有IPv4地址 2、查出分區空間使用率的最大百分比值 3、查出用戶UID最大值的用戶名、UID及shell類型 4、查出/tmp的權限,以數字方式顯示 5、統計當前連接本機的每個遠程主機IP的連接數,并按從大到小排序 grep 1、顯示/proc/meminfo文件中以大小s開頭的行;(要求:使用兩種方式…

    Linux干貨 2016-08-07
  • 第三周作業

    博客具體內容請移步博客園: http://www.cnblogs.com/ITOps/p/6204549.html

    Linux干貨 2016-12-20
  • 使用CDN后,PHP如何獲取用戶的真是IP?

    在統計訪問日志參數的時候IP是一個重要的參數,所有索取客戶端的IP就至關重要。 在logformat配置中有兩個變量是獲取IP地址的: remoteaddr:客戶端IP xforwardedfor:客戶端的IP 從上面來看兩個都是客戶端IP,那這兩個變量有什么不同? 首先當你訪問某個網站,假設你中間不經過任何代理,那么webserver就會把remotead…

    Linux干貨 2015-12-21
  • centos系統中常用的命令

    日志文件說明:  /var/log/message      系統啟動后的信息和錯誤日志,是Red Hat Linux中最常用的日志之一   /var/log/secure      &nb…

    Linux干貨 2016-06-28
  • CentOS7下的網絡配置管理

    一、讓配置永久有效的辦法:修改配置文件 與網卡相關(課配置網卡的IP,掩碼,網關,DNS)     /etc/sysconfig/network-scripts/ifcfg-INTERFACE 字段解釋: TYPE        &nbsp…

    Linux干貨 2016-03-28
  • Linux Basic–磁盤分區

    附件: 磁盤管理相關方法.pdf

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