文本三剑客之grep加vim编辑器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文本三剑客之grep加vim编辑器相关的知识,希望对你有一定的参考价值。

好几周没写博客了,今天又时间就随便写了点。

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 "root" /etc/passwd :表示单词的词尾
$ 行位锚定,用于模式的右侧
^PATTERN$ :用于模式匹配整行
     ^$ 空行
     ^[[:space:]]*$ 空白行
< 或  词尾锚定,用于单词模式的左侧
> 或  词尾锚定; 用于单词模式的右侧
<PATTERN> 匹配整个单词   

分组:
如: echo lilili| grep "(li){3}"
 echo rootxxrbbt |grep ‘(r..t).*{r..t}‘
 分组:()将一个或多个字符捆绑在一起,当作一个整体进行处理,如:
 (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

 判断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次

位置锚定:
^ :行首
$ :行尾
<,  :语首
>,  :语尾
?分组:
()
后向引用: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:全局替换,每次替换前询问
?查找替换中的分隔符/可替换为其它字符,例如
[email protected]/[email protected]/[email protected]
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编辑器的主要内容,如果未能解决你的问题,请参考以下文章

文本处理三剑客之---grep系

Shell编程之正则表达式

文本三剑客

linux文本处理三剑客之grep

文本处理三剑客之-grep

linux自学笔记--vim和文本三剑客基础