1. grep, egrep, fgrep - print lines matching a pattern 行模式匹配
使用用法如下:
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
模式选择项:
-E:使用扩展的正则表达式
-F :使用固定字符串进行匹配
-G :使用基本正则表达是
-P :使用perl正则表达式
匹配控制:
-e PATTERN : 使用指定的PATTERN 进行匹配,可以指定多个-e选项进行匹配的,仅使用于符合posix的接口的
-f FILE:匹配文件的内容,从文件的每一行进行匹配操作,仅适用于符合posix的接口的
-i:忽略大小写
-v:获取不匹配的行
-w:单词匹配
-x:显示完全匹配一整行的
输出控制:
-m NUM: 匹配多少次之后就不再进行匹配操作的
-o:仅显示匹配到的内容
输出前缀控制
-n:打印行号
输出文本控制
-A NUM:输出文本后面增加num的输出
-B NUM:输出文本的前面增加num的输出
--group-separator:指定输出分隔符
文件和目录选择:
-D ACTION:对设备文件的处理,默认是read,可指定为skip
-d ACTION:对目录的处理,默认是read,可指定skip等操作
--binary-files=TYPE:二进制文件,按照指定的type类型进行处理
--exclude:不读取符合指定的glob风格的文件
--exclude-from:跳过文件基名符合任何的glob风格的信息的
--exclude-dir:派出指定的目录信息
--include=GLOB:知识搜索指定的文件
-r:递归搜索,如果是目录的话,可以递归搜索文件下面所有的文件
正则表达式使用语法
[]:匹配中括号中的任意的单个字符
[^]:匹配中括号以外的内容
[a-d]:等于[adcd]
[:alnum:]:所有的数字和字母
[:alpha:]:所有的字母
[:cntrl:]:
[:digit:]:数字
[:graph:]:
[:lower:]:匹配小写字母
[:print:];
[:punct:];
[:space:];
[:upper:]; 匹配大写字母
[:xdigit:]
位置锚定:
^:表示开头
$:表示结尾
单词锚定
\<:锚定单词开头
\>:锚定单词结尾
\b:锚定单词尾部空的字符串
\B:锚定不是单词尾部的空字符串
\w:等于[_[:alnum:]]
\W:等于[^_[:alnum:]]
可复用操作符
?:最多一次
*:0或多次
+:一次或者多次
{n}:匹配n次
{n,}:至少匹配n次
{,m}:之多匹配m次
{n,m}:至少n次,至多m次
多个模式的拼接采用|进行操作。转义操作\n表示的是单个字符n,不是换行的意思。
基本正则表达式和扩展正则表达式的对比
基本的正则表达式使用如下的字符代替原来的字符,原来的字符失去了意义的:
\?:?
\+:+
\{:{
\|; |
\(:(
\):)
扩展的正则表达式中,不要出现{,应该使用[{] 来代替{。
下面是使用示例
[root@mrzhang ~]# grep -i -o '\
[root@mrzhang ~]# grep -v '\
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@mrzhang ~]# grep '\<\(root\)\|\(fedora\)\|\(user1\)\>' /etc/passwd // 显示匹配root用户,fedora用户,user1用户的信息的。
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
fedora:x:1009:1009::/home/fedora:/bin/bash
user1:x:1010:1010::/home/user1:/bin/bash
[root@mrzhang ~]# grep '\
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
fedora:x:1009:1009::/home/fedora:/bin/bash
user1:x:1010:1010::/home/user1:/bin/bash
[root@mrzhang ~]# grep -e '\
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
fedora:x:1009:1009::/home/fedora:/bin/bash
[root@mrzhang ~]# grep -o '\<[[:alpha:]]\+\>()' /etc/rc.d/init.d/functions
checkpid()
daemon()
echo "/etc/rc.d/init.d/functions" | grep -o '/.*/' // 匹配目录名称,和dirname的作用是一样的
[root@mrzhang ~]# echo "/etc/rc.d/init.d/functions" | grep -o '/.*/'
/etc/rc.d/init.d/
[root@mrzhang ~]# dirname /etc/rc.d/init.d/functions
/etc/rc.d/init.d
获取基名
[root@mrzhang ~]# basename /etc/rc.d/init.d/functions
functions
[root@mrzhang ~]# echo "/etc/rc.d/init.d/functions" | grep -o '/[^/]*' | tail -n 1 // 切割获取基名,类似的效果如同basename
[root@mrzhang ~]# echo "/etc/rc.d/init.d/functions" | grep -o '/[^/]*' | tail -n 1
/functions
[root@mrzhang ~]# basename /etc/rc.d/init.d/functions
functions
[root@mrzhang ~]# ifconfig | grep '\<[1-9]\>\|\<[1-9][0-9]\>\|\<[1][0-9][0-9]\|\<[2][0-5][0-5]\>' // 查找获取1-255之间的数字,可以实现获取ip地址等信息的街区操纵管理实现的。
ens33: flags=4163
inet 192.168.8.121 netmask 255.255.255.0 broadcast 192.168.8.255
2.vim :文本编辑器,使用语法如下
vim [options] [file ..]
vim [options] -
vim [options] -t tag
vim [options] -q [errorfile]
+num:指向第num行的开头
+/pattern :指向的是第一次匹配pattern的地方
+{command}:第一次打开文件的时候执行的动作:
[root@mrzhang ~]# vim "+set nu" fstab // 打开文件的同时设置行号
-{command}:第一次打开文件的时候取消特性 // 很少使用
--cmd {command}:打开文件之前设置执行多个命令,最多10个 // 很少使用
其中vim专门的操作指令可以使用如下的信息进行提示: vimtutor 查看即可
其中常见的操作信息如下:
x:删除光标处的字符信息
i:插入文本信息,在字符后面追加
A:追加文本,在字符前面进行追加
wq:保存
dw:删除单个单词(指的是删除到下一个单词的开头)
d$:删除光标到行尾的所有
上面的操作可以结合数字进行操作的,如3dw可以一次删除3个单词的。
dd:删除一整行
u:撤销上一次的操作
p:将上一次复制的内容粘贴到光标所在的后面
rx:替代操作
.. 后面的还有很多的操作,可以使用 vimtutor 查看和获取帮助的。在vimtutor中可以使用模式进行搜索的。
下面展示的主要是地址定界和替换等的相关的操作信息的(使用%s)
%s@^[[:space:]]\+@@g //将文件开头的空格删除,对应的使用的是基本的正则表达式的
%s@^#[[:space:]]\+@@g // 将行首为#,后面跟上一个或者多个空白字符删除
3.nano:不是很常用,文本编辑器,语法如下:
nano [OPTIONS] [[+LINE,COLUMN] FILE]...
+num:跳转到指定的行的其实位置
其他的参见打开文件后的也买你提示信息的
关闭文件
ctrl+x 执行两次即可
ctrl+o 保存,然后ctrl+x退出
4.sed:过滤和文本转化的流编辑器,使用用法如下:
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
常用的选项信息如下:
-e script: 执行的脚本信息
-f script-file:执行的脚本文件
-r:在脚本中使用扩展的正则表达式
s/regexp/replacement/ :替换操作
w filename 将当前行写入到文件中
W filename: 将模式空间中的第一行写入到文件中
y/source/dest/ 将source中出现的匹配的内容转换为目标内容实现
r filename:从文件中读取内容
R filename:从文件中读取一行进行追加
常用的地址定界操作信息如下:
number:只当的行号
first~step:起始位置和步长信息
$:最后一行的信息
/regexp/:匹配正则表达式的行信息
0,addr:从开始到地址addr
addr1,+N:地址addr1和后面的N行信息
addr1,~N : 地址addr1和N之间的多行信息
上面的多个选项,在实际的使用中是需要结合地址定界进行处理实现的。
下面是使用示例
[root@mrzhang tmp]# sed 's/^[[:space:]]\+//g' grub2.cfg // 将文件首部的空格删除操作
[root@mrzhang tmp]# sed 's@^#[[:space:]]\+@@g' grub2.cfg // 删除#开头的行
[root@mrzhang tmp]# sed '1~2w /tmp/grub' grub2.cfg // 将文件grub2.cfg的奇数行写入到/tmp/grub文件中
[root@mrzhang ~]# echo "/etc/sysconfig/network-scripts" | sed 's@/.*/@@' // 获取基名
[root@mrzhang ~]# echo "/etc/sysconfig/network-scripts" | sed 's@/.*[^/].*/@@' // 获取基名信息
network-scripts
[root@mrzhang ~]# echo "/etc/sysconfig/network-scripts" | sed 's@[^/]\+/\?$@@' // 获取基名
或者是采用如下的方式
[root@mrzhang ~]# echo "/etc/sysconfig/network-scripts" | sed 's@[^/]*$@@' // 获取目录名称信息也可。