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 全局替换,每次替换前询问 查找替换中的分隔符可以替换为其他字符 [email protected]/[email protected]/[email protected] 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