Linux grep正则

Linux grep正则,第1张

先解释下你egrep 双引号里面的意思:任意0-9数字或者字母n开头,重复匹配此条件4次!

n102来说第一个字母n,n开头满足,从第二个字符开始,后面1、0、2均满足任意0-9数字或者字母n这个条件,你可以试试将1/0/2任意一个改成非数字或字母n的,就不能匹配出来了。

希望可以帮到你。欢迎追问。

Linux命令分为内部命令(shell自带的命令)和外部命令(不是shell自带的命令,由用户安装),怎么鉴别是内部命令和外部命令呢?可以通过type命令来鉴别

什么是shell呢?shell是一个程序,常用的有bash shell,平时我们通过用户名和密码登录到linux,其实就是登录到bash shell程序,通过bash shell来 *** 作linux内核

命令执行流程

那岂不是说使用外部命令效率会很慢吗?

其实一点都不慢,它会去PATH环境变量设置的一堆目录中查找

cd is a shell builtin 表示内部命令

ifconfig is hashed (/usr/sbin/ifconfig) 表示外部命令

cd命令切换文件

现在我们cd /usr/sbin

通过cat命令查看文件内容

通过cat ifconfig来查看ifconfig,发现是乱码文件

file命令查看文件类型

输入file ifconfig

从输出信息可以看出它是一个二进制可执行文件

whereis命令查看文件位置

find / -name jdk

echo命令用户打印信息,相当于java中的systemoutprintln

可以使用回车查看下一行、空格查看下一页、q退出

一般使用man查看外部命令,help查看内部命令

查看linux下的应用和应用的进程号

当我们在这个窗口中输入kill -9 1593的话,另外一个正在编辑文件的进程就会退出

在前面我们已经讲过,bash shell程序在执行命令的一个过程及原理,对于外部命令,它会去PATH这个环境变量中查找执行命令所在的路径,当然在去PATH中寻找之前会先去hash表中查找这个命令有没有执行过,执行过的话会记录在hash表中,则此次查找只需从hash表中就可以很方便的找到

查看分区信息 -h 表示文件大小后面会显示文件大小

查看文件的使用情况

使用man ls 查看ls命令的相关介绍

-a:可以查看隐藏文件

-l:以长列表的形式展示文件列表信息

第一位 -:表示文件,d表示文件夹,b表示块设备文件,c表示字符设备文件,p表示命令管道文件,s表示套接字文件, 从第二位开始往后数九位表示属主权限(每三位一组 rwx:读、写、执行),第11位表示的点表示分隔符,点后面的数字表示文件有几个硬连接,第一个root代表属主名,第二个root代表这个第一个root所在的组织,接下来的5表示文件大小,5后面的日期表示文件最后一次修改的时间, 1txt代表的文件或文件夹的名称

小结:

切换文件目录

cd 文件路径

cd:切换到家目录

cd ~:回到家目录(也就是家目录)

cd :回到上一级目录

创建目录

mkdir 目录名

mkdir -p 目录名,级联创建目录

cp 被拷贝的文件(可以是路径加文件名) 拷贝到哪个位置

复制目录使用

cp -r 被拷贝的目录 目标位置

移动命令

mv 被移动的文件 目标位置+目标文件名

rm 文件名(此中方式的删除需要再输入 yes)

rm -f 文件名,无提示直接删除

rm -rf 文件夹

ln命令默认创建的是硬连接

ln profile a:将a硬连接到profile文件上,他们底层共用一个文件,删除他们之中任何一个

对另外一个没有影响,同时你也可以使用 ll -i命令查看文件编号

ln -s profile a:将a软连接到profile文件,当你访问a的时候会去访问profile,profile再访问底层文件,当将profile删除了之后a就无法访问了

一致时间、创建新文本

touch 已存在的文件:会将文件的访问时间、更新时间、改变时间(即上面stat中介绍的三个时间)变成一致

touch 不存在的文件:会创建一个新的文本

cat命令查看文件内容

cat 1txt:查看单个文件内容

cat 1txt 2txt:查看多个文件

more 1txt:以分页的形式查看文件内容,按空格:下一页,回车:下一行(注意它不能回看,回看的话只能用鼠标回轮)

less 1txt:使用空格下一页, b看上一页, 回车看下一行

注意less的话会把整个文件内容加载到内存,如果文件比较大的话,建议使用more命令查看

head命令默认查看文件前10行内容, head 1txt

head -5 1txt:查看文件前5行的内容

tail命令默认查看文件后10行的内容 tail 1txt

tail -5 1txt:查看文件后5行内容

tail -f 1txt:实时查看文件增量内容

cat btxt | head -3:管道左边的命令会以输出流的形式交给管道右边的命令,管道右边以输入流的形式接收并且拼到命令的右边

注意:ls -l 不能接受前面的输出流,这个怎么办呢?可以通过xargs命令

vi文本编辑器末行模式的 *** 作

set nu(number的缩写): 设置行号

set nonu(nonumber的缩写):取消行号

set readonly:设置为只读

n:往下查找

N:往上查找

n:往上查找

N:往下查找

一般我们会在/etc/profile文件中设置一些环境变量,但是在设置的时候可能没有记住目录,这时候我们可以使用如下方式

效果

格式 :s/str1/str2/gi

/ : 临近s命令的第一个字符边界字符,也可以是 @或#

g : 一行内全部替换

i : 忽略大小写

范围

n:行号

:当前光标行

+n :偏移n行

-3

%:全文

全部删除 1,$d

删除前三行

删除倒数第2行

光标挪到最后一行 按下小写的p

效果图

正则表达式是对字符串 *** 作的一种逻辑公式,就是用事先定义好的一些特殊字符、及这些特定字符的组合组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。

\ :转义字符

:匹配任意单个字符

[1249a] :匹配中括号中任意字符

[^12] :匹配中括号中任意非1和2的字符

[a-k] :匹配中括号中任意a~k中的一个字符

^ :行首

$ :行尾

<abc> :单词首尾边界(匹配单词abc)

| :连接 *** 作符

(,) : 选择 *** 作符

\n :反向引用

:匹配0到1次

在Linux中通过grep命令使用正则表达式来匹配信息

f :选择显示的列

s :不显示没有分隔符的行

d :自定义分隔符

n :按数值排序

r :倒序

t :自定义分隔符

K :选择排序列

u :合并相同行

f :忽略大小写

sed:行编辑器,以行为单位进行处理,可以将数据进行替换、删除、新增、选取等特定工作

sed [options] 'Command' file

-n :静默模式,不再默认显示模式空间(内存)中的内容

-i :直接修改原文件

-e SCRIPT :可以同时执行多个脚本

-f /PATH/TO/SED_SCRIPT

-r :表示使用扩展正则表达式

d :删除符合条件的行

p :显示符号条件的行

a \string :在指定的行后面追加新行,内容为string

\n :可以用于换行

i \string :在指定的行前面添加新行,内容为string

c :取代,c的后面可以接字符串

s /pattern/string/修饰符:查找并替换。默认只替换每行中第一次被模式匹配到的字符串

g :行内全局替换

i :忽略字符大小写

s///:s###,s@@@

(),\1,\2

sed "2p" ctxt

但是在执行下面的 *** 作的时候文本中的内容都显示出来了,它的原理是,打印匹配的行,以及文本中所有的内容

注意:它删的是内存中的数据,而不是目标文件

sed -i "3d" ctxt

它的原理是先把内存中的第3行数据删除,然后再把内存中的数据写回原文件,这时原文件中的第三行就没有了

使用变量的形式

awk是一个强大的文本分析工具。

相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。

简单来说awk就是把文件逐行的读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk -F '{pattern + action}' {filenames}

支持自定义分隔符,默认是以空格分隔的

支持正则表达式匹配

支持自定义变量,数组 a[1] a[tom] map(key)

支持内置变量

ARGC 命令行参数个数

ARGV 命令行参数排列

ENVIRON 支持队列中系统环境变量的使用

FILENAME awk浏览的文件名

FNR 浏览文件的记录数

FS 设置输入域分隔符,等价于命令行 -F选项

NF 浏览记录的域的个数

NR 已读的记录数

OFS 输出域分隔符

ORS 输出记录分隔符

RS 控制记录分隔符

支持函数

print、split、substr、sub、gsub

支持流程控制语句

if、while、do/while、for、break、continue

练习题

passwd文件内容解读:

passwd文件中每行由7个字段组成,字段与字段之间由:分隔,第一个字段代表用户名,第二个字段表示用户对应的加密后的密码,第三个字段表示userId,第四个字段表示groupId,第五个字段表示对用户的描述,第六个字段表示用户的家目录,第七个字段表示的是这个用户默认使用的shell

其中$0表示整行

统计报表:合计每人1月工资, 0:manager,1:worker

将awk后面的内容封装到一个文件中(封装的脚本要遵循一定的格式)

qqq文件的内容格式

去计算时间,find -mmin +分钟 -mmin -分钟

+是指多少分钟以前

-是指多少分钟之内

这样混合就出来了

如果不想去创建

那就find -name "-16-"

find -name "-17-"

find -name "-18-"

这样去搞

sed编辑器是一行一行的处理文件,正在处理的内容存放在模式空间(缓冲区)中,处理完毕后按照选项的规定进行输出或文件的修改。

sed主要用来自动编辑一个或多个文件;简化文件的反复 *** 作,用于非交互编译文件。

可以使用一个简单的数字,或是一个行号范围

注意:p的动作是:打印匹配行。

1 原始文件:

2 sed的默认动作

(1)sed的默认动作是打印文件中的所有行。

3 打印特定行

(1)因为sed命令默认打印文件中所有行。所以第三行会被打印两遍。那如何只打印第三行呢?使用-n命令,只打印匹配的行。

(2)使用-n命令,只打印匹配到的行

(3)打印[n,m]行

(4)打印包含模式的行

(5)打印包含模式和指定行号之间的行

(6)包含模式和包含模式之间的行

(7) {}执行多个命令(command),使用;隔开。=是显示文件行的行号。p是打印匹配行

(8)!取反 *** 作

(9)q命令:第一个模式匹配完成后退出或立即退出,使用该命令打印前5行

(1)使用[]进行正则匹配

(2)其他的正则表达式

(1)打印出以#开头的行,然后用!进行反选,则表示过滤掉以#开头的行,不会过滤掉空格。

(2)匹配以#开头的行,进行取反,则打印出非#开头的行,然后其结果在对空格开头的行进行取反。即 过滤掉以#开头的行和以空格开头的行。 {}表示在定位行执行的命令组。

(3)sed支持对单个文件实现不同的 *** 作,每个 *** 作用-e参数。定位到执行的行后,使用d命令,直接删除匹配到的行。

需要注意的是,对源文件的添加要使用-i参数。

s:使用替换模式替换相应模式

(1)在匹配行前面替换字符,使用s命令。

(2)在所有行开头替换元素s

(3)在所有行的末尾替换元素

(4)指定行,进行替换 *** 作

(5)&符号代表的是匹配到的字符。在匹配到字符后,可以使用&代替。

(6)在匹配到行前面添加一行,使用i的命令

(7)在匹配行的后面添加一行,使用a命令

(8)当添加多行时,使用\n来转义

(9)@代表的是地址定界符,一般由三个组成,定界符可以是/,$,#等特殊字符,此命令表示,匹配特定字符的行进行替换。

(10)使用命令g修改全文中出现的匹配字符。

(11)若后面接数字之后在接g,表示匹配的行中,第几次出现。就替换,2g表示替换行中第二次出现。

(1)删除以非#号开头的行,即显示以#号开头的行。

(2)删除第一行

(3)删除最后一行

(4)删除指定的行区间

(5)删除包含特定单词的行

本文参考:

sed命令详解

以下内容首发自公众号“小汪Waud”。

本期介绍在Linux环境下的正则表达式及grep命令。

正则表达式(Regular Expression)是对字符串 *** 作的一种逻辑公式,就是用事先定义好的一些特定字符及这些字符的特定组合,组成一个“规则字符串”,这个字符串用来表达对字符串的一种过滤逻辑。

正则表达式基本上是一种表示法,只要程序支持这种表示法,该程序就可以用来作为正则表达式的字符串处理之用。如vi、grep、awk、sed等程序支持正则表达式,所以可以使用正则表达式的特殊字符来进行字符串的处理。但例如cp、ls等命令并不支持正则表达式,所以只能用自己的通配符。

正则表达式依照 不同的严谨度 分为:基础正则表达式和扩展正则表达式。

注意!

grep是一种强大的文本搜索工具,可以使用 正则表达式匹配模式 查找文件里符合条件的字符串,并打印出来。

有点类似于WORD里的查找功能。

grep支持三种正则表达式语法:Basic、Extended和perl兼容。 如果没有提供正则表达式类型,grep将搜索模式解释为基本的正则表达式。要将模式解释为扩展正则表达式,请使用-E。

查看grep的帮助文档,如下

基本用法

grep [OPTION] PATTERN [FILE]

高级用法

grep [-A] [-B] [--color=auto] "查找字符" [模式] [文件]

常用参数

首先通过cat命令查看samplestxt的内容,如下图

如果想检索以K为行首的行,通过以下命令即可得到

如果想检索以Z为行尾的行,通过以下命令即可得到

如果想检索三个字符其中前面为K,后面为D中间字符,为任意字符,通过以下命令即可得到

参考资料

>

正则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索或替换那些符合某个模式的文本内容。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。

只有掌握了正则表达式,才能全面地掌握 Linux 下的常用文本工具(例如:grep、egrep、GUN sed、 Awk 等) 的用法

grep、sed、awk天然支持正则

grep -v代表反选,反向选择匹配到的内容

grep -E代表使用扩展正则

grep -P代表使用Perl正则

sed -r 代表使用扩展正则

正则表达式分为三类(man grep可以看到,分别是basic RegExs,extended RegExs,perl RegExs)

1、基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx 简称 BREs)

2、扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称 EREs)

3、Perl 的正则表达式(Perl Regular Expression 又叫 Perl RegEx 简称 PREs)

b 处理过程:查找文本文件中是否包含要查找的 “关键字”(关键字可以是正则表达式) ,默认返回匹配的该行的内容

c grep|egrep处理文件时,按行处理 |

| sed | sed | sed -r | - | a 处理对象:文本文件

b处理 *** 作:对文本文件的内容进行 查找、替换、删除、增加等 *** 作

c sed 在处理文本文件的时候,按行处理 |

| awk | - | awk | - | a awk 处理的对象:文本文件

b awk 处理 *** 作:主要是对列进行 *** 作 |

注意:egrep 或 sed -r 默认使用扩展正则表达式(EREs),一般特殊字符({})可以不转义

grep -E 以及egrep(Extend Regular Expression)

Linux通配符和三剑客的正则表达式是不一样的,因此,代表的意义也有较大的区别

通配符一般用户命令行bash环境,而linux正则表达式用于grep, sed, awk场景。

通配符说明

示例: 的使用:代表任意0-N个字符,代表所有字符

以上就是关于Linux grep正则全部的内容,包括:Linux grep正则、Linux相关使用介绍、linux中括号的正则表达式如何匹配16到22等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9704730.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存