grep 正则表达式 vim

一:umask:

当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限"补码",而chmod设置的是文件权限码。一般可在/etc/profile、/etc/bashrc、$ [HOME]/.bash_profile、$[HOME]/.profile或$[HOME]/.bashrc中设置umask值。具体取决于Linux发行版。

修改方式为:umask xxx,这种方式修改后不能长期存在(类似于系统的变量),要想一直存在,umask值可以存储在/etc/bashrc当中,使所有用户均被设置,也可以存在~/.bashrc只对某用户设置。

二:grep

--color=auto 关键字高亮显示

-v 反向搜索

-i 忽略大小写

-n 显示行号

-c 不显示搜索结果,仅显示匹配的行数

-o 仅显示匹配到的字符串

-q 静默输出

 grep -q root /etc/passwd  

    echo $? 

    若$?为0表示执行成功若结果为1,表示未找到该字符串

    grep -q root /etc/passwd && echo 找到了 ||echo 未找到 

    grep -q root /etc/passwd &> /dev/null && echo 找到了 ||echo 未找到 

    以上两个例子效果相同原理不一。要注意。

-A #  显示搜索行及其向下相临的#行

-B #  显示搜索行及其向上相临的#行

例子:nmap -v -sP 172.18.250.0/24 |grep -B1 'Host is up' |grep for |cut -d" " -f5

-C #  显示搜索行及其向上和向下相临的#行

-e char1 -e char2 [-e charN] 多个选项间or关系

-w 匹配整个单词

-E 或egrep 支持扩展正则表达式

-F 或fgrep 不支持正则表达式

grep "$USER" /etc/passwd :显示变量;

grep '$USER' /etc/passwd :显示字符串$USER

grep    `whoami` /etc/passwd :显示命令执行的结果

三:正则表达式

正则表达式由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。grep、awk、sed等命令可以支持正则表达式。

元字符分类:字符匹配,匹配次数,位置锚定,分组。

例子:去除配置文件中的注释行和空白行

grep -v "^#\|^[[:blank:]]*$" /etc/httpd/conf/httpd.conf

通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。通配符必须是完全匹配

通配符

元字符 作用
* 匹配0个或任意多个字符,也就是可以匹配任何内容
匹配任意一个字符
[] 匹配[ ]中任意一个字符
[-] 匹配括号中任意一个字符,-代表一个范围,例如:[a-z]代表匹配一个小写字母
[^] 逻辑非,表示匹配不是中括号内的一个字符,例如[^0-9]代表匹配一个不是数字的字符

基础正则表达式

元字符 作用
* 前一个字符匹配0次或任意多次,匹配0次前一个字符则表示匹配任意字符,包括空白行
. 匹配除了换行符以外任意一个字符,“.*”匹配所有内容
^ 用于指定匹配字符串的头部,也称行首定位符;匹配行首。例如:^hello会匹配以hello开头的行,grep -n “^$” test.txt匹配空白行并显示行号
$ 用于指定匹配字符串的尾部,也称行尾定位符;匹配行尾。例如:hello$会匹配以hello结尾的行
[] 匹配中括号中指定的任意一个字符,只匹配一个字符,要匹配[则要转义\[
[^] 匹配除中括号的字符以外的任意一个字符
\ 转义符用于取消特殊符号的含义,匹配包含以.结尾的行grep “\.$” test.txt
\{n\} 表示其前面的字符恰好出现n次。例如:[0-9]\{4\}匹配4位数字,但注意添加两边的定界符,以精确匹配
\{n,\} 表示其前面的字符出现不小于n次。例如:[0-9]\{2,\}匹配2位以上的数字
\{,n\} 表示其前面的字符出现不大于n次。例如:[0-9]\{,2\}匹配2位以下的数字
\{n,m\} 表示其前面的字符至少出现n次,最多出现m次。例如:[a-z]\{6,8}匹配6到8位的小写字母


元字符


描述


[:lower:]


小写字母


[:upper:]


大写字母


[:alpha:]


所有字母


[:digit:]


数字


[:alnum:]


所有数字和字母


[:punct:]


标点符号


[:space:]


空白字符


\?


匹配其前面的字符1次或0次

\+ 匹配其前面的字符至少1次

^$(^[:space:]*$)


表示空行(空白行)


\<或\b


铆定词首,其后面的任意字符必须作为单词的首部出现


\>或\b


铆定词尾,其前面的任意字符必须作为单词的尾部出现


\(\)


分组


\(ab\)*


ab作为一个整体,可以出现任意次


\(ab\).*\1


引用第一个左括号以及与之对应的右括号所包括的所有内容


\(ab\).*\2


引用第二个左括号以及与之对应的右括号所包括的所有内容

扩展正则表达式

元字符 作用
| 管道符,表示“或”,即匹配其中任何一个,”book|desk”将匹配”book”或”desk”
- 减号,用于指明字符范围, “[a-c]”将匹配包含a、b和c中任意一个字符的字符串

字符匹配


.


匹配任意单个字符


[]


匹配指定范围内的任意单个字符


[^]


匹配指定范围外的任意单个字符


次数匹配


*


匹配其前字符任意次


?


匹配其前字符0次或1次


+


匹配其前字符至少1次,类似于基本正则表达式\{1,\}


{m,n}


匹配其前面的字符至少m次,至多n次


位置铆定


^


行首


$


行尾


\<或\b


词首


\>或\b


词尾


分组


().*\1\2\3


或者


|


or  a|b ,a或者b ,有一个就行


C|cat--> C或cat

(C|c)at-->Cat或cat

单引号’’强引用,不做变量替换的

双引号””弱引用,内部的变量会替换

四:非贪婪匹配

贪婪匹配 
在满足匹配时,匹配尽可能长的字符串,默认情况下采用贪婪匹配

string pattern1 = @"a.*c";   // greedy match Regex regex = new Regex(pattern1);
regex.Match("abcabc"); // return "abcabc" 123

非贪婪匹配 
在满足匹配时,匹配尽可能短的字符串,使用?表示非贪婪匹配

string pattern1 = @"a.*?c";   // non-greedy match Regex regex = new Regex(pattern1);
regex.Match("abcabc"); // return "abc"1234

几个常用的非贪婪匹配Pattern

      • *? 重复任意次,但尽可能少重复
      • +? 重复一次货更多次,但尽可能少重复
      • ?? 重复0次或1次,但尽可能少重复
      • {n, m}? 重复n到m次,但尽可能少重复
      • {n,}? 重复n次以上,但尽可能少重复
  • 练习:

1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)

cat /proc/meminfo |grep "^s\|S"

cat /proc/meminfo |grep -i ^s

grep ^[sS] /proc/meminfo

grep -e ^s -e ^S /proc/meminfo

2、显示/etc/passwd文件中不以/bin/bash结尾的行

cat /etc/passwd  |grep -v "/bin/bash$"

3、显示用户rpc默认的shell程序

grep -w "^rpc" /etc/passwd |cut -d: -f7

4、找出/etc/passwd中的两位或三位数

cat /etc/passwd | grep  -o "\<[[:digit:]]\{2,3\}\>"

5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行

cat /etc/grub2.cfg | grep "^[[:space:]]\+[^[:space:]]"

6、找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多个空白字符结尾的行

netstat -tan | grep "LISTEN[[:space:]]\+$"

7、显示CentOS7上所有系统用户的用户名和UID

cat /etc/passwd |cut -d: -f1,3 | grep "\<[0-9]\{1,3\}\>"

8、添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin),找出/etc/passwd用户名同shell名的行

cat /etc/passwd | grep "\(^.*\)\>.*\<\1$"

9、利用df和grep,取出磁盘各分区利用率,并从大到小排序

df | grep -o "[0-9]\{1,3\}%" | grep -o "[0-9]\+" | sort -nr

df |grep "^/dev/sd" |grep -o "[[:digit:]]\{1,3\}%" |tr -d % |sort -nr

作业:

1、显示三个用户root、mage、wang的UID和默认shell

cat /etc/passwd|cut -d: -f1,3|grep -e "root\>" -e "mage"\ -e "wang\>"

2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

grep "(^[[:alpha:]]+|^_+.*)\(\)" /etc/rc.d/init.d/functions

3、使用egrep取出/etc/rc.d/init.d/functions中其基名

echo /etc/rc.d/init.d/functions | egrep -o "[^/]+$"

4、使用egrep取出上面路径的目录名

echo /etc/rc.d/init.d/functions | egrep -o "^.*\/" | egrep -o "^.*[^/]"

5、统计last命令中以root登录的每个主机IP地址登录次数

last |egrep "\<root\>" |tr -s " "|cut -d " " -f1,3|sort|uniq -c

6、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255

[0-9]
[1-9][0-9]
1[0-9]{2}
2[0-4][0-9]
25[0-5]

7、显示ifconfig命令结果中所有IPv4地址

ifconfig |grep "inet\b"|tr -s " "|cut -d" " -f3

8、将此字符串:welcome to  magedu linux 中的每个字符去重并排序,重复次数多的排到前面

echo welcome to  magedu linux |grep -o [[:alpha:]]|sort|uniq  -c|sort -rn

四:vim

三种主要模式

命令模式 (default): 移动光标,复制,剪切,粘贴,撤销,重做,搜索,进入其他模式

移动光标:

h向左移动

l向右移动

j向下移动

k向上移动

配合#h,#l,#j,#k可一次性移动#个字符

w跳到下一个单词的词首

b跳到上一个单词的词首

H跳到当前页首

M跳到当前页中

L跳到当前页尾

gg跳到整个文件的首行

G跳到整个文件的末行

^移到非空格开头的行首

$移到行尾

#G跳到指定行,或退出模式下:#

Ctrl+f: 向文件尾部翻一屏

Ctrl+b: 向文件首部翻一屏

Ctrl+d: 向文件尾部翻半屏

Ctrl+u:向文件首部翻半屏

r替换一个字符

d剪切

dd剪切当前行

#dd剪切#行

dw剪切一个单词

d^从光标所在处剪切到行首

d$或D从光标所在处剪切到行尾

y复制

yy或Y复制当前行

#yy复制#行

yw复制一个单词

y^从光标所在处复制到行首

y$从光标所在处复制到行尾

p粘贴

p当前行向下粘贴或光标所在处向后粘贴

P当前行向上粘贴或光标所在处向前粘贴

替换模式 R进入 Esc退出

从命令模式进入插入模式

i光标在哪从哪进入

I光标移至行首同时进入插入模式

a光标向后移一个字符同时进入插入模式

A光标移至行尾同时进入插入模式

o光标向下插入一新行同时进入插入模式

O光标向上插入一新行同时进入插入模式

插入模式:文本编辑

退出模式:保存、退出

w:保存

q:退出

q!强制退出

wq或x 保存并退出

w!当前用户为该文件所属人时,如果该文件为read only,可加上!强制保存。

在退出模式下返回命令模式EscEsc或Enter

r /path/filename 读取另一个文件的内容并将输出结果写入文件

w /path/filename 另存为(确认当前用户对该路径中的最后一级目录有wx权限)

! command 执行某条命令,将输出结果显示在终端上

r! command 执行某条命令,在光标所在的当前行向下插入新行并将输出结果输入

.! command 执行某条命令,替换光标所在的当前行并将输出结果输入

搜索

/关键字

n向下找

N向上找

?关键字

n向上找

N向下找

例子:

dog pig dog cat dog

pig dog root dog cat

dog linux roat dog cat

pig root dog cat dog pig

fish dog rooter pig dog

bird dog cat rbbt pig

把以上内容中的rxxt换成rxxter,已经是rxxter的不变

%[email protected]\(r..t\)\>@\[email protected]

http://mirrors.163.com/  换成https://mirrors.sina.com/dvd

:%[email protected]://[email protected]://mirrors.sina.com/[email protected]

作业:

1、复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符

:%[email protected]^[[:blank:]]\[email protected]@g

2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号

:%[email protected]\(^[[:blank:]]\+\)@#\[email protected]

原文地址:http://blog.51cto.com/13560258/2063232

时间: 2024-11-06 09:42:14

grep 正则表达式 vim的相关文章

第6天grep正则表达式 ,vim,shell概念

grep ,egrep ,fgrepfgrep不支持正则表达式搜索 ,只支持普通字符串过滤grep -E grep -F grep是两个合在一起grep root /etc/passwdgrep "$USER" /etc/passwd 可以过滤变量结果grep 'root' /etc/passwd 可以过滤字符串grep whoami /etc/passwd 可以过滤命令结果grep abc 寻找adc 包含abc字符串就显示 PATTEN字符串 也可以是文件grep是包含字符串就全都

linux入门之grep 正则表达式案例

grep 正则表达式案例 案例一: 1.显示/proc/meminfo文件中以大小s开头的行:(要求:使用两种方式) #grep -i '^s' /proc/meminfo #grep  '^[Ss]' /proc/meminfo #grep -E '^(s|S)' /proc/meinfo 2.显示/etc/passwd文件中不以/bin/bash结尾的行 #grep -v '/bin/bash$' /etc/passwd 3.显示用户rpc默认的shell程序 #grep '^\<rpc\>

grep 正则表达式

名字 grep, egrep, fgerp 解释: grep是一个最初用于Unix操作系统的命令行工具. 在给出文件列表或标准输入后, grep会对匹配一个或多个正则表达式的文本进行搜索, 并只输出匹配(或者不匹配)的行或文本. 用法: grep [option] 'PATTERN' file ... --color=auto          常用选项[option]:               -v : 反向匹配, 显示不能被模式匹配到的行.               -o : 只显示被

grep正则表达式与grep用法详解

功能:输入文件的每一行中查找字符串. 基本用法: grep [-acinv] [--color=auto] [-A n] [-B n] '搜寻字符串' 文件名 参数说明: -a:将二进制文档以文本方式处理-c:显示匹配次数-i:忽略大小写差异-n:在行首显示行号-A:After的意思,显示匹配字符串后n行的数据-B:before的意思,显示匹配字符串前n行的数据-v:显示没有匹配行-A:After的意思,显示匹配部分之后n行-B:before的意思,显示匹配部分之前n行 --color:以特定颜

grep正则表达式详解及练习

grep正则表达式详解及练习 一.在学习grep正则表达式前,先了解下linux著名的文本处理三剑客: (1)grep.egrep.fgrep 文本搜索工具. (2)sed     文本编辑工具,一种流编辑器,行编辑工具. (3)awk 强大的文本分析工具,文本格式化工具,文本报告生成器. 以上三大命令均支持正则表达式,本文以grep正则表达式为例展开学习. 1.什么是正则表达式? 正则表达式(Regular Expression):由一类特殊字符及文本字符所编写的模式,其有些字符不表示其字面意

grep正则表达式原理介绍及应用实例

应用背景:我们刚刚添加了一个用户Luffy,但是不知道他的默认shell是什么. 问题:如何取出一个用户的默认shell? 解决方法: #grep '^Luffy\>' /etc/passwd | cut -d: -f7 /bin/bashf 通过上面的方法,我们就得到了Luffy这个用户的默认shell 文本搜索工具:就是要根据用户指定的文本模式,逐行的进行匹配,最终得到符合文本模式的行 grep是一个强大的文本搜索工具,下面我们就介绍一下grep的语法: grep [OPTIONS] PAT

linux grep 正则表达式

grep正则表达式元字符集: ^ 锚定行的开始 如:'^grep'匹配所有以grep开头的行. $ 锚定行的结束 如:'grep$'匹配所有以grep结尾的行. . 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p. * 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行. .*一起用代表任意字符. [] 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep. [^] 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]

linux 命令grep正则表达式

Linux 命令grep正则表达式 在linux里面有处理文本的三剑,现在我要说的就是grep正则表达式的使用,正则表达式只是一种表示法,只要工具支持这种表示法,那么该工具就可以处理正则表达式的字符串.vi grep ,awk ,sed 等都支持正则表达式..正则表达式有基本正则表达式和扩展正则表达式. grep默认就是基本表达式. 基本正则表达式: 默认匹配次数:贪婪模式,尽可能多的去匹配. 扩展正则表达式:基于基本正则表达式多加了一些功能,基本一样. 1. grep命令 grep [参数]

awk &nbsp; sed &nbsp; grep &nbsp; &nbsp; 正则表达式

做事要有耐心. 虚心接受建议,你确实有很多缺点. 就算进步慢,也不可以停止前进的脚步. AWK awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk有三种不同版本: awk   gawk    nawk 1.使用方法 awk '{pattern + action}' {filenames} 其中 pattern 表示 AWK 在数