單詞
REGEXP
n. 正則表達式;表達式對象
regular expressions
正則表達式;
issue
n. 問題;流出;期號;發行物
vt. 發行,發佈;
文本處理
grep 文本過濾工具 pattern
grep
egrep
fgrep(不支持正則表達式)
grep pattren .....
--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 不支持正則表達式
注意:默認除了字母+數字或者字母+下劃線算作單詞之外
正則表達式REGEXP 處理文本內容
由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,
而表示控制或通配功能
程序支持:grep sed awk vim less nginx varnish等
分類
基本正則表達式 :BRE
擴展正則表達式: ERE grep -E ,egrep
正則表達式引擎
採用不同算法,檢查處理正則表達式的軟件模塊
PCRE Perl Compatible Regular Expreessions perl語言
元字符分類:
字符匹配,匹配次數,位置錨定,分組
man 7 regex
注意 通配符裏面只是匹配文件名 不能處理文本中文字
基本正則表達式元字符
字符匹配
. 匹配任意單個字符
[] 匹配指定範圍內的任意單個字符
[^] 匹配指定王偉外的任意單個字符
[:alnum:] 字符和數字
[:alpha:] 代表任何英文大小寫字符即a-z A-Z
[:lower:] 小寫字母
[:upper:] 大寫字母
[:blank:] 空白字符 空格和製表符
[:space:] 水平和垂直的空白字符
[:cntrl:] 不可打印的控制字符 退格 刪除 警鈴
[:digit:] 十進制說數字
[:xdigit:] 十六進制數字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 標點符號
匹配次數
用在要指定次數的字符後面,用於指定前面的字符要出現的次數
匹配前面的字符人一次,包括0次
貪婪模式:儘可能長的匹配
.任意長度的任意字符
\? 匹配其前面的字符0或1次
+ 匹配其前面的字符至少1次
{n} 匹配其前面的字符n次
{m,n} 匹配前面的字符至少m次,至多n次
{,n} 匹配前面的字符至多n次
{n,} 匹配前面的字符至少n次
grep -v "^[[:space:]]*$" f1 過濾空行。過濾空格 teb鍵形成的空行
位置錨定:定位出現的位置
^ 行首錨定,^a
$ 行尾錨定 b$
^pattern$ 匹配整行
^$空行
^[[:space:]]*$ 空白行
\<或者\b 詞首錨定 \<root
\>或者\b 詞尾錨定 bash\>
\<pattern\>匹配整個單詞
分組
()將一個或多個字符捆綁在一起,當做一個整體進行處理(root)+
分組括號中的模式匹配到的內容會被正則表達式引擎記錄於內部的變量中,這些變量的命名
方式爲\1 \2 \3 從左括號開始算
\1 表示從左側起第一個左括號以及與之匹配右括號之間的模式所***匹配到的字符***
\(string1+\(string2\)*\)
\1 string1\+\(string2\)*
\2 string2
向後引用:
或者 \|
a\|b a或b
C\|cat C或cat
\(C\|c\)at Cat或cat
擴展正則表達式:egrep
egrep = grep -E
次數匹配:
匹配前面的字符人一次,包括0次
貪婪模式:儘可能長的匹配
.任意長度的任意字符
? 匹配其前面的字符0或1次
-
匹配其前面的字符至少1次
{n} 匹配其前面的字符n次
{m,n} 匹配前面的字符至少m次,至多n次錨定
^ 行首錨定,^a
$ 行尾錨定 b$
\<或者\b 詞首錨定 \<root
\>或者\b 詞尾錨定 bash\>分組 ()
向後引用 \1 \2
egrep -o "\"
擴展正則表達式和基礎正則表達式主要是在於大部分的去\
ifconfig ens33 |egrep -o "\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-50]).){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-50])\>"
192.168.220.133
255.255.255.0
192.168.220.255
有些命令是用 擴展
取基名echo /etc/rc.d/init.d/ |egrep -o "[^/]/?$"
echo /etc/rc.d |egrep -o "(./.)" | egrep -o ".*/"
basename取基名
dirname
文本編輯器vi visual Interface
文本 ASDII Unicode
文本編輯種類
行編輯器 sed
全屏編輯器 nano vi
vim - Vi Improved
其他編輯器:
gedit 一個簡單的圖形編輯器
gvim 一個Vim編輯器的圖形版本
vim 一個模式編輯器
三種主要模式:
命令模式normal:默認模式,移動光標,剪切/粘貼文本
插入或編輯模式insert:修改文本
擴展命令模式extended command:保存,退出等
Ese鍵:退出當前模式
總是返回命令模式
打開文件 vim file
+數字 移到第數字行的行首
+/Pattern 打開文件後,直接讓光標處於第一個被pattern匹配到的行的行首
-b file 二進制打開
-d file1 file2 比較多個文件
-m file 只讀打開文件
ex file 或者 vim -e 直接進入ex模式
如果該文件存在,文件被打開並顯示內容
若果文件不存在,當編輯後第一次存盤是創建它
編輯文件
切換到命令模式:
i 光標不動
I 光標行首
o 向上插入空白行並居於行首
O 向上插入空白行並居於行首
a 光標後移
A 光標行尾
關閉文件
擴展模式:
按:進入擴展模式
:r otherfile 複製其他文檔內容到現打開文件
:q 不做修改的時候所用的退出
:q! 做了修改不保存的強制退出
:wq 做了修改保存並退出
:w otherfile 將當前文件內容寫入另外一個文件
:!command 執行命令
:r!command 讀取命令的輸出
echo -e "\e[1;31mred\e[0m" 顏色 red是有顏色的字符串
在文本中是
^[[1;31mfjiejf^[[0m 其中^[ 由ctrl+v+左中括號
命令模式下的光標跳轉
字符間跳轉:
h 左
l 右
j 下
k 上
numCOMMAND 3h 左移三位
單詞間跳轉:
w 下一個單詞的詞首
e 當前或下一個單詞的詞尾
b 當前或前一個單詞的詞首
numCOMMAND 3w 下三個單詞詞首 空格爲一個單詞
當前頁面跳轉:
H 頁首 heading
M 頁中間行 middle
L 頁底 low
行首行尾跳轉:
^ 行首的第一個非空白字符
0 行首
$ 行尾
行間移動:
#G 跳到#行
G 最後一行
1G,gg 第一行
句間跳動: .空格 以及空行爲句子分隔符
)下一句
( 上一句
段落跳動: 空行爲段落分隔符
} 下一段
{ 上一段
命令模式下的操作
字符操作
x 刪除光標字符,實際爲剪切 按p粘貼
numx 刪除光標起始處開始的num個字符
xp 交換光標所在處的字符及後面字符的位置
~ 轉換大小寫
J 刪除當前行後的換行符
替換命令 r replace
r 替換光標所在處的字符
R 切換成REPLACE模式,可以連續替換
刪除命令:
d:刪除命令,可結合光標跳動字符,實現範圍刪除
d$ 刪除到行尾
d^ 刪除到非空行首
d0 刪除到行首
dw
de
db
dd 刪除光標所在行
numdd 多行刪除,刪除num行
D 從當前光標位置一直刪除到行尾,留空行=d$
複製命令:y yank
y:複製,行爲相似與d命令
y$
y^
y0
yw
ye
yb
yy 複製行
#yy 複製多行
Y 複製整行
改變命令 d命令再增加一個功能切換到插入模式
詳情看一下d命令
特殊
10istring[ESC] 粘貼string10次
<start position><command><end position>
Command:
y複製 d 刪除 gU 變大寫 gu變小寫
eg:
0y$====0>先到行首
y>從這裏開始拷貝
$>拷貝到行尾
ye===從當前位置拷貝到本單詞的最後一個字符
擴展命令模式:地址定界
:start_point,end_pointcommand
num 移到第幾行
num1,num2 選中num1行到num2行
num1,+num2 從num1開始,加上num2行 2,+3 ===表示2——5行
. 當前行
$ 最後一行
:.,$-1 當前行到倒數第二行
% 全文,相當於1,$
/pattern1/,/pattern2/
從第一次被pattern1模式匹配到的航開始,一直到第一次陪匹配到的行結束
#,/pattern /行首到匹配到pattern
/pattern/,$ 匹配到pattern 到行尾
***使用方法:後面跟一個編輯命令
d y w file 將範圍內的行另存至指定的文件中
r file 在指定位置插入指定文件中的所有內容
查找---與man相似
/PATTREN 從當前光標所在處向文件尾部查找
?PATTERN 從當前光標所在處向文件首部查找
N
n
查找並替換
s 在擴展模式下完成查找替換操作
格式:s/要查找的內容/替換爲的內容/修飾符
要查找的內容:可使用模式
替換爲的內容:不能使用模式,但可以使用後向引用\1 \2 還可以
使用& 引用前面查找時查到的整個內容
修飾符:
i 忽略大小寫
g 全局替換,默認每行只替換第一次出現
gc 全局替換,每次替換前詢問
查找替換中的分隔符可以替換爲其他字符
s@/etc@/var@g
s#/boot#/#i
:% s#/boot#/#i 全文
:1,10s#/boot#/#i 1-10行
準確單詞替換 s#\(login\)#sbsb#g 利用分組表達式
:%s/xyz/&er/g xyz 被xyzer替換
注意:不標註行默認光標所在行,要確定搜索的行
命令模式撤銷
u 撤銷最近的更改
numu 撤銷之前num次更改
U 撤銷光標所在行所有此行的更改,不過前提是光標不能離開過這行
Ctrl+r 重複上一次所撤銷的動作
. 重複上一個操作
n. 重複上一次操作n次
命令模式
vim中的寄存器即剪貼板
有26個命名寄存器和1個無命名寄存器,常存放不同的剪貼版內容,可以不同回話間共享
一個進行復制,另一個進行粘貼
寄存器名稱a-z
格式:"寄存器 放在數字和命令之間
eg:
3"tyy 表示複製3行到t寄存器中
"tp 表示將t寄存器內容進行粘貼
未指定,將使用命名寄存器
有10個數字寄存器,用0-9表示,0存放最近複製的內容,
1存放最近刪除內容
當新的文本變更和刪除時,1轉到2 ,2轉到3 以此類推
數字寄存器不能在不同回話共享
可視化模式
允許選擇的文本塊
v 面向字符
V 面向行
ctrl+v 轉向面向塊
突出顯示文字可被刪除,複製,變更,過濾,搜索,替換
多文件模式vim file1 file2 file3
:next 下一個
:prev 前一個
:first 第一個
:last 最後一個
:wall 保存所有
:qall 退出所有
:wqall
使用多個窗口
多問件分割
vim -o/O file1 file2 ...
-o 水平分割
-O 垂直分割
窗口切換 Ctrl+w ARROW(上下左右箭頭)
單文件窗口分割
Ctrl+w s
制定vim工作特性
配置文件
全局:/etc/vimrc
個人:~/.vimrc
擴展模式:當前的進程有效
行號
顯示 set nu ===set number
取消 set nonu ===set nonumber
自動縮進
啓用 set ai
禁用 set noai
忽略字符大小寫
啓用 set ic
不忽略 set noic