1. 程式人生 > >文本三劍客之grep加vim編輯器

文本三劍客之grep加vim編輯器

lease 所在 替換 三劍客 禁用 red 直接 打開文件 pre

好幾周沒寫博客了,今天又時間就隨便寫了點。

linux文本處理三劍客:
grep:文本過濾工具  grep ,egrep,fgrep(用來打印各種行,patten模式)
它需要標準輸入,CentOS6裏也可以實現標紅。alias gerp 是別名
 nmap -v -sp 172......0/24 |gerp -B1 "Host is up" 掃描ip地址
 grep 數字加字母加下劃線都算單詞的一部分。
 grep 支持正則表達式
 grep -w 過濾單詞的 如: ls |grep -w "..."
 grep-o 只顯示模式的字符串數字
 作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;
打印匹配到的行。
模式:由正則表達式字符及文本字符所編寫的過濾條件
grep root/etc/passwd
grep "$USER /etc/passwd
grep ‘$USER‘ /etc/passwd
grep `whoami` /etc/passwd
--color=auto: 對匹配到的文本著色顯示
-v: 顯示不被pattern匹配到的行
-i: 忽略字符大小寫
-n:顯示匹配的行號
-c: 統計匹配的行數
-o: 僅顯示匹配到的字符串
-q: 靜默模式,不輸出任何信息
-A #: after, 後#行
-B #: before, 前#行
-C #:context, 前後各#行
-e:實現多個選項間的邏輯or關系
grep –e ‘cat ’ -e ‘dog’ file
-w:匹配整個單詞
-E:使用ERE
-F:相當於fgrep,不支持正則表達式
     -f :包含關系
 正則表達式:
 處理文本內容中特定的字符串。

 PCRE(perl)語言非常處理文本
 元字符分類:字符匹配、匹配次數、位置錨定、分組
 字符匹配:
 1、. 匹配任意單一字符。如echo abbc |grep a..c    還有貪婪模式,如:ls |grep ...盡可能匹配長的字符串。
 ...表示一個字符,  ".\.."轉義 :回歸字符本身的含義。.放在[]以內就不需要轉義了。
 2、[] 表示[]裏的某個字符
 如:echo abcdef  |grep "a[xyz]c" :去除中闊號裏的每個字符。
 匹配次數:出現的字符次數有幾個
 如:echo abx |grep x* 空 x xx xxx ...
 *表示匹配前面字符重復的次數
 echo ab |grep "ax*b"
 .*:表示任意長度的任意字符串
 \? :表示前面的字符0次或1次
 如:echo abbccdd |grep "a[a-z]\?c"
 \+:表示一個以上,表示某個數字以上
 如:echo "1a"|grep "[a-z]\+"
2、位置錨定:定位出現的位置
^ 行首錨定 
grep "\broot\b" /etc/passwd \b:表示單詞的詞尾
$ 行位錨定,用於模式的右側
^PATTERN$ :用於模式匹配整行
     ^$ 空行
     ^[[:space:]]*$ 空白行
\< 或 \b 詞尾錨定,用於單詞模式的左側
\> 或 \b 詞尾錨定; 用於單詞模式的右側
\<PATTERN\> 匹配整個單詞   

分組:
如: echo lilili| grep "\(li\)\{3\}"
 echo rootxxrbbt |grep ‘\(r..t\).*{r..t\}‘
 分組:\(\)將一個或多個字符捆綁在一起,當作一個整體進行處理,如:
 \(root\)\+
 分組括號中的模式匹配到的內容會被正則表達式引擎記錄於內部的變量中,這些
 變量的命名方式為:\1,\2,\3,...
 \1 表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字符。
 如:\(string1\+(string2\)*\)
  \1 : string1\+(string2\0*
  \2 : string2 
 後向引用 : 引用前面的分組括號中的模式所匹配字符,而非模式本身
或者:\|
如: a\|b: a或b C\|cat: C或cat  \(C\|c)at: Cat或cat

 判斷os版本號:
CentOS6:grep -o " [0-9]\+."  /etc/redhat-release |grep -o "[0-9]\+"
CentOS7:grep -o "[0-9]\+"  /etc/redhat-release  |head -n1

egrep及擴展的正則表達式
egrep = grep -E
egrep [OPTIONS] PATTERN [FILE...]
擴展正則表達式的元字符:
字符匹配:
. 任意單個字符
[] 指定範圍的字符
[^] 不在指定範圍的字符
擴展正則表達式
?次數匹配:
*:匹配前面字符任意次
?: 0或1次
+:1次或多次
{m}:匹配m次
{m,n}:至少m,至多n次

位置錨定:
^ :行首
$ :行尾
\<, \b :語首
\>, \b :語尾
?分組:
()
後向引用:\1, \2, ...
或者:
a|b: a或b
C|cat: C或cat
(C|c)at:Cat或cat
Vi:Visual Interface ,文本編輯器
文本:ASCII,Unicode
文本編輯種類:
    行編輯器:sed
    全屏編輯器:nano,vi
    vim - Vi Improved
其他編輯器:
      gedit:一個簡單的圖形編輯器
      gvim:一個Vim編輯器的圖形版本
打開文件
?# vim  [OPTION]... FILE...
+#: 打開文件後,讓光標處於第#行的行首,+默認行尾
+/ PATTERN :打開文件後,直接讓光標處於第一個被 PATTERN 匹配到的行的
行首
–b file 二進制方式打開文件
–d file1 file2… 比較多個文件
-m file 只讀打開文件
ex file 或 vim –e 直接進入ex模式
如果該文件存在,文件被打開並顯示內容
如果該文件不存在,當編輯後第一次存盤時創建它
 vim:一個模式編輯器
擊鍵行為是依賴於 vim的 的“模式”
三種主要模式:
命令(Normal)模式:默認模式,移動光標,剪切/粘貼文本
插入(Insert)或編輯模式: 修改文本
擴展命令(extended command )模式: 保存,退出等
Esc鍵 退出當前模式
Esc鍵 Esc鍵 總是返回到命令模式

模式轉換
插入模式 --------> 命令模式
ESC
命令模式 --------> 擴展命令模式
:
擴展命令模式 --------> 命令模式
ESC,enter

 命令模式:查看功能 H,J,K,L,
 用i鍵編輯
 I編輯
 esc退出
 都可以編輯:a,A o,O
 q!強行退出
 r :可以把新文件內容讀過去

 命令界面按R切換至replace

關閉文件
?擴展模式:
:q  退出
:q!  強制退出,丟棄做出的修改
:wq  保存退出
:x  保存退出
命令模式
ZZ: 保存退出
ZQ:不保存退出

 擴展模式
按“:”進入Ex模式
創建一個命令提示符: 處於底部的屏幕左側
命令:
w  寫(存)磁盤文件
wq  寫入並退出
x  寫入並退出
q 退出
q!  不存盤退出,即使更改都將丟失
r filename  讀文件內容到當前文件中
w filename 將當前文件內容寫入另一個文件
!command 執行命令
r!command 讀入命令的輸出

命令模式光標跳轉:
字符間跳轉:
h:左 i:右 j:下   k:上
#COMMAND:跳轉由#指定的個數的字符
單詞間跳轉:
w: 下一個單詞的詞首
e: 當前或下一個單詞的詞尾
b:當前或前一個單詞的詞首
#COMMAND:由#指定一次跳轉的單詞數
當前頁跳轉:
H:頁首 M:頁中間行 L:頁底

命令模式光標跳轉
?行首行尾跳轉:
^: 跳轉至行首的第一個非空白字符
0: 跳轉至行首
$: 跳轉至行尾
?行間移動:
#G、擴展模式:# :跳轉至由#指定行
G:最後一行
1G, gg: 第一行
?句間移動:
):下一句  (:上一句
?段落間移動:
}:下一段  {:上一段

 命令模式翻屏操作
?Ctrl+f: 向文件尾部翻一屏
?Ctrl+b: 向文件首部翻一屏
?Ctrl+d: 向文件尾部翻半屏
?Ctrl+u:向文件首部翻半屏

 命令模式操作
?字符編輯:
x: 刪除光標處的字符
#x: 刪除光標處起始的#個字符
xp: 交換光標所在處的字符及其後面字符的位置
~:轉換大小寫
J:刪除當前行後的換行符
?替換命令(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: 復制整行

命令模式操作
粘貼命令(p, paste):
p:緩沖區存的如果為整行,則粘貼當前光標所在行的下方;否則,則粘貼
至當前光標所在處的後面
P:緩沖區存的如果為整行,則粘貼當前光標所在行的上方;否則,則粘貼
至當前光標所在處的前面

命令模式操作
 改變命令(c, change)
c: 修改後切換成插入模式
命令模式 --> 插入模式
c$
c^
c0
cb
ce
cw
#COMMAND
cc:刪除當前行並輸入新內容,相當於S
#cc:
C:刪除當前光標到行尾,並切換成插入模式

命令模式
100iwang [ESC] 粘貼“wang”100次
<start position><command><end position>
Command:
y 復制、d 刪除、gU 變大寫、gu 變小寫
例如 0y$ 命令意味著:
0 → 先到行頭
y → 從這裏開始拷貝
$ → 拷貝到本行最後一個字符
ye 從當前位置拷貝到本單詞的最後一個字符

擴展命令模式:地址定界
地址定界
:start_pos,end_pos
# 具體第#行,例如2表示第2行
#,# 從左側#表示起始行,到右側#表示結尾行
#,+# 從左側#表示的起始行,加上右側#表示的行數
:2,+3 表示2到5行
. 當前行
$ 最後一行
.,$-1 當前行到倒數第二行
% 全文, 相當於1,$

擴展命令模式:地址定界
/pat1/,/pat2/
從第一次被pat1模式匹配到的行開始,一直到第一次被pat2匹配到的行結
束
#,/pat/
/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

命令模式:撤消更改
u撤銷最近的更改
#u撤銷之前多次更改
U 撤消光標落在這行後所有此行的更改
按Ctrl - r重做最後的“撤消”更改
. 重復前一個操作
n.重復前一個操作n次

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  面向塊
 可視化鍵可用於與移動鍵結合使用:
shift+i鍵進入編輯模式
輸入#
雙擊ESC鍵

w ) } 箭頭等
 突出顯示的文字可被刪除,復制,變更,過濾,搜索,替換等

多文件模式
vim FILE1 FILE2 FILE3 ...
:next 下一個
:prev 前一個
:first 第一個
:last 最後一個
:wall 保存所有
:qall 退出所有
:wqall

使用多個“窗口”
 多文件分割
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 ic
不忽略:set noic
?(3) 自動縮進
啟用:set ai
禁用:set noai

定制vim的工作特性
?(4) 智能縮進
啟用:smartindent 簡寫 set si
禁用:set nosi
?(5) 高亮搜索
啟用:set hlsearch
禁用:set nohlsearch
?(6) 語法高亮
啟用:syntax on
禁用:syntax off
?(7) 顯示Tab和換行符 ^I 和$顯示
啟用:set list
禁用:set nolist

定制vim的工作特性
?(8) 文件格式
啟用windows格式:set fileformat=dos
啟用unix格式:set fileformat=unix
簡寫: set ff=dos|unix
? (9) 設置文本寬度
啟用: set textwidth=65 (vim only)
禁用: set wrapmargin=15
? (10) 設置光標所在行的標識線
啟用:set cursorline,簡寫cul
禁用:set no cursorline
? (11) 復制保留格式
啟用: set paste
禁用: set nopaste

了解更多
? Set 幫助
?:help option-list
?:set or :set all
? vi/vim內置幫助
:help
:help  topic
Use :q to exit help
vimtutor

文本三劍客之grep加vim編輯器