Linux四剑客及正则表达式

正则表达式

  • 基础正则(使用四剑客命令时无需加任何参数即可使用)
^    # 匹配以某一内容开头 如:'^grep'匹配所有以grep开头的行。    
$    # 匹配以某一内容结尾 如:'grep$' 匹配所有以grep结尾的行。
^$	 # 匹配空行。
.    # 匹配任意单个字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。    
*    # 前一个字符出现0次及0次以上 如:'a*'匹配所有有a的行。
.*   # 表示文件中所有内容。
[]   # 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^]  # 匹配一个不在指定范围内的字符,如:'[^A-Z]rep' 匹配不包含 A-Z 中的字母开头的行注意:在[]中,除位置在第一个字符的^外,其余任何带含义的特殊符号都会被还原。
  • 扩展正则

    • 使用方法
    grep命令:grep -E ……		或egrep ……
    sed命令:sed -r ……
    awk命令:awk -E ……
    
    • 表达式
    +		#匹配前一个字符连续出现1次或1次以上 如:'a+' 匹配字符a连续出现1次或多次的行。注:通常与[]配合使用,过滤连续的内容。
    {n,m}	#匹配前一个字符至少n次,最多m次,优先匹配后面的数字例:'[0-9]{18}'	匹配连续的18个数字
    |		#或者例:'^$|^#'	匹配文件的空行或以井号开头的
    ()		#表示一个整体;反向引用/后向引用
    
  • 单词边界符

\b    	# 单词锁定符,如: '\bgrep\b'只匹配grep;'\b[0-9]{18}\b'只匹配连续的18位数字
\<    	# 锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。    
\>    	# 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
\<……\>	# 相当于\b...\b
\w      # 匹配文字和数字字符,也就是[A-Za-z0-9];
\W      # \w的反置形式,匹配一个或多个非单词字符,相当于[^A-Za-z0-9]

四剑客

find 在指定目录下查找文件

语法形式

find [参数] [选项]					   #单条件查找
find [参数] [选项] [or/and] [选项]	  #多条件查找

or/and

#使用find命令可以多条件查找;
-a			#需要同时满足两个、多个条件时(and可以省略);
-o			#只需满足其中之一条件时;

选项

-type f/d/l/b/c				#按照文件类型查找;
-name "NAME"				#按照文件名字查找;
-iname "NAME"				#按照文件名字查找(忽略大小写);
-inum "INUM"				#按照文件iNode号查找;
-maxdepth n					#按照深度等级查找(向下遍历);
-size +n/-n/n				#按照文件大小查找;
-mtime +n/-n/n				#按照文件修改时间查找;当n=0,代表24小时内被修改过的文件;

示例

#查找/目录下文件名为dezyan.txt的文件(不区分大小写)
[root@Dezyan ~]# find / -iname "dezyan.txt"
/proc/kcore
#查找/目录下文件大小大于1M的目录
[root@Dezyan ~]# find / -size +1M -type d
注意:当一个目录大小大于1M,说明该目录中存在非常多的小文件
#查找/目录下的字符设备或块设备文件
[root@Dezyan ~]# find / -type c -o -type b
或	find / -type c,b
#以深度等级为1查找/目录下以.log结尾的文件
[root@Dezyan ~]# find / -maxdepth 1 -name "*.log" -type f
#查找24小时内被修改过的文件
[root@Dezyan ~]# find ./ -mtime 0
xargs 给其他命令传递参数的一个过滤器

注意:在xargs后别名失效

语法形式

find …………	| xargs [文件操作,命令]
#可以理解为将|前执行的结果甩到末尾,再执行|后的命令

相关使用方法

-n1					 #按照第一列方式输出内容
ls -l/cat			 #查看找到的文件;
rm [选项]				#将查找的文件删除;
-i cp/mv {} [参数]	#将查找到的文件复制/移动到[参数位置];
cp/mv -t [参数]		#将查找到的文件复制/移动到[参数位置];

示例

#将/etc/下大于9M的文件复制到~目录下
[root@Dezyan ~]# find /etc/ -size +9M | xargs cp -t ~
[root@Dezyan ~]# ls ~ | grep 'hwd'
hwdb.bin
#查找出所有大写的.TXT结尾的文件 然后打包成test.tar.gz
[root@Dezyan ~]# find ./ -name "*.TXT"|xargs tar zcvf a.tar.gz
exec 调用并执行指定的命令

注意:使用exec将多个文件压缩成一个压缩包是不可取的,因为按照exec的逻辑,是将前一命令的每一次执行结果依次放入{},进行压缩时,会不断覆盖文件;

语法形式

find …………	-exec [命令] {} [参数] \;

注意:其中==;==为shell中命令的分隔符,可将多个命令同时执行:mkdir test;touch 1.txt。

相关使用方法

rm [选项] {} \;		#将查找的文件删除;
cp/mv {} [参数] \;	#将查找到的文件复制/移动到[参数位置];

示例

#将/etc/下大于9M的文件复制到~目录下
[root@Dezyan ~]# find /etc/ -size +9M -exec  cp {} ~ \;
使用``和$()

语法形式

[命令+选项] `find ……………` 
[命令+选项] `find ……………` [参数]

$()效果与``相同

注意:如果一段命令被添加上了``,那么在整体命令中,需要先执行``中的命令,类似于运算法则中的加减乘除先算()。

相关使用方法

cp/mv `find ……` [参数]
ls/rm……

示例

#将/etc/下大于9M的文件复制到~目录下
[root@Dezyan ~]# cp -a `find /etc/ -size +9M` ~

grep 强大的文本搜索工具

语法形式

grep [选项] '[word]' [参数]

选项

-v				#反转查找;
-r				#当指定要查找的是<目录>而非文件时,必须使用这项参数;
-E				#识别扩展正则进行过滤;等同于egrep;
-o				#展示匹配过程;
------------------------------------------------------------
--color			#对筛选出的WORD加颜色显示;建议设置永久别名;
-i				#搜索时不区分大小写;
-n				#搜索出的结果显示行号;
-w   			#过滤的内容两边必须是空格(类似于边界符)
-c   			#统计单词出现的次数;
-A   			#过滤到内容往下2行;
-B   			#过滤到内容往上2行;
-C   			#过滤到内容上下各2行;

示例

#在/etc/passwd文件中过滤出root的行
[root@Dezyan ~]# grep 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
#不区分大小写过滤出 /etc/ssh/sshd_config 文件中包含`port 22`的行并输出行号
[root@Dezyan ~]# grep -i -n  'port 22'   /etc/ssh/sshd_config 
17:#Port 22
#排除(取反)/etc/selinux/config文件中的#和注释
[root@Dezyan ~]# grep -v '^#|^$'  /etc/ssh/sshd_config
#统计word.txt文件中shutdown单词的个数
[root@Dezyan ~]# grep -c 'shutdown' word.txt 
2
#显示文件word.txt中config的上下各两行
[root@Dezyan ~]#  grep -C 2 'config' word.txt 
test	测试			
server	服务			
configure	配置	config	conf	cfg
continue	继续			
next	下一个

sed 功能强大的流式文本编辑器

  • 语法形式
sed [选项] '[模式][动作]' [参数]
  • 选项
-n			#取消内存空间默认输出;不添加时sed命令会默认输出文件所有内容及匹配到的内容;
-r			#使模式中的正则表达式支持扩展正则;
-i			#对源文件进行修改;不添加时不会修改;
  • 模式
number								#按行查找,查找第n行
number或正则符号,number或正则符号	  	 #查找n到m行
/字符串或正则表达式/					  #模糊查询,查询包含此字符串的行
/字符串/,/字符串/				 		#匹配区间:查询两个字符串之间的内容(也可用正则)
n[动作];m[动作]						 #指定第n行和第m行进行操作
  • 动作
p						#输出打印过滤出的内容
d						#删除过滤出的内容
a	字符串		  		  #add 在……后追加xxx 
i	字符串		  		  #insert 在……前插入xxx
c	字符串		  		  #replace 将……替换为xxx
w	文件				   #将过滤到的内容写入到文件中
--------------------------------------------------
s###g					#1.其中,g代表全局替换#2.s///g、s@@@g等与s###g效果相同	

注意:

  • 动作中有p,模式中必有n

  • 在使用匹配区间( /开头字符串/,/结尾字符串/ )时,尽量使用文件内容中唯一的、不重复的字符串

    • 若只有一个开头,有两个甚至多个结尾时:输出的内容只会是开头到第一个结尾字符串之间的内容
    • 若只有开头,结尾字符串没有:输出的内容为开头字符串到文件末尾
  • sed的后向引用

sed 's#(正则)(数字)(字符串)#\1\3#g' 		#\n获取第n个()中的内容

实例

#获取IP地址
[root@Dezyan ~]# ip add show ens33 | sed -rn '3s#.*et (.*)/24 .*$#\1#gp'
10.0.0.101#批量创建用户test01..test03
[root@Dezyan ~]# echo test{01..03} | xargs -n1 | sed -r 's#(.*)#useradd \1#g' | bash##批量创建用户test01..test03并设置密码为dingzhiyan1016
echo test{01..03} | xargs -n1 | sed -r 's#(.*)#useradd \1 ; echo dingzhiyan1016 | passwd --stdin \1#g' | bash
或
[root@Dezyan ~]# echo test11{01..03} | xargs -n1 | sed -r 's#(.*)#useradd \1 ; echo \1:dingzhiyan1016 | chpasswd #g'  | bash#批量删除用户
[root@Dezyan ~]# echo user{1..20} | xargs -n1 | sed -r 's#(.*)#userdel -r \1#g' | bash
  • 示例
1.a.txt文件
[root@Dezyan ~]# cat -n a.txt 1	The first snow came. 2	How beautiful it was, falling so silently all day long,3	all night long.4	on the mountains, on the meadows, 5	on the roofs of the living, on the graves of the dead! A2.查看a.txt文件第三行的内容
[root@Dezyan ~]# sed -n '3p' a.txt 
all night long.3.查看a.txt文件中第三行到结尾的内容
[root@Dezyan ~]#  sed -n '3,$p' a.txt 
all night long.
on the mountains, on the meadows, 
on the roofs of the living, on the graves of the dead! A4.查看a.txt中以o开头或以T开头的行
[root@Dezyan ~]# sed -rn '/^o|^T/p' a.txt 
The first snow came. 
on the mountains, on the meadows, 
on the roofs of the living, on the graves of the dead! A5.查看a.txt文件中包含so与meadows行之间的内容
[root@Dezyan ~]# sed -n '/so/,/meadows/p' a.txt 
How beautiful it was, falling so silently all day long,
all night long.
on the mountains, on the meadows,6.在a.txt文件1到3行后都添加一行Dezyan
[root@Dezyan ~]# sed '1,3i Dezyan' a.txt 
Dezyan
The first snow came. 
Dezyan
How beautiful it was, falling so silently all day long,
Dezyan
all night long.
on the mountains, on the meadows, 
on the roofs of the living, on the graves of the dead! A7.将a.txt文件中所有的(第一个)on替换为under
[root@Dezyan ~]# sed 's#on#under#g' a.txt (只替换第一个只需将g去掉即可)
The first snow came. 
How beautiful it was, falling so silently all day lunderg,
all night lunderg.
under the mountains, under the meadows, 
under the roofs of the living, under the graves of the dead! A8.查找roofs所在行,并将其替换为floor,并且只显示替换行
[root@Dezyan ~]# sed -n '/roofs/s#roofs#floor#gp' a.txt
on the floor of the living, on the graves of the dead! A9.删除文件amount.txt中的所有字母
[root@Dezyan testdir]# sed -r 's#[a-Z]##g' amount.txt

awk 文本和数据进行处理的编程语言

  • 语法形式
awk [选项] '哪一行{print 哪一列}' [file]
#逻辑:按行取列,先将符合条件的行尽数找出,再对其中的某一列进行选取;
#awk本质上其实是一种编程语言,其中可以进行运算;
  • 选项
-F ""			#指定分隔符;
  • 取行
#当语法形式中的`{print 哪一列}`为空即为取行
1.指定某行或某几行
语法形式:awk 'NR[运算符]n' file
使用awk内置变量:NR  --> 存储每行的行号
运算符:== 等于>  大于>= 大于等于<  小于<= 小于等于!= 不等于&& 且|| 或
#可使用内置函数取出文件内容的最后一行awk 'END{print}' file
2.模糊过滤取行
语法形式:awk '模式' file
模式'可以使用正则符号'://		#模糊查找文件中的字符串//,//	#模糊查找两字符串之间的内容
  • 字符比对查取行
语法形式:awk [选项] '[取列内置变量] [模式匹配符] "[表达式]"' file
模式匹配符:==		#某列等于……!=		#某列不等于……~		#使用正则匹配字符串!~		#使用正则匹配字符串并取反
表达式:任意字符正则表达式
  • 数字比对查取行
语法形式:awk [选项] '[取列内置变量] [模式匹配符][运算符]n' file
  • 取列
#当语法形式中的`哪一行`为空即为取列
语法形式:awk '{print [内置变量]}' file
awk内置变量:$0  	# 表示整行$n  	# 表示文件的第n列 ,   	# 逗号表示空格NF  	# 表示每一行最后一列的列号$NF		# 表示最后一列;`$(NF-1)`表示倒数倒数第二列 --> 也体现了awk支持运算的特性
  • 指定分隔符取列
语法形式:awk -F "[表达式]" '{print [内置变量]}' file
表达式:任意字符正则表达式
  • 指定分隔符按行取列
awk -F "[表达式]" '取行方式+取列方式' file
  • BEGIN的用法
#BEGIN 是一个特殊的模式,它在处理任何输入行之前执行一次。
awk -F "[表达式]" 'BEGIN{print 任意内容}' file
  • 示例
#过滤文件的选择:/etc/passwd文件的前10行,存储到了~/passwd.txt中
#即:head /etc/passwd >> ~/passwd.txt
#在未明确说明分隔符时,默认指定分隔符为":"
1.指定取行
#取出文件最后一行 
[root@Dezyan ~]# awk 'END{print}' passwd.txt
#取出第7行和第9行以及两行之间的内容
[root@Dezyan ~]# awk 'NR>=7&&NR<=9' passwd.txt2.模糊取行
#取出文件中以root开头和以adm开头以及两行之间的内容
[root@Dezyan ~]# awk '/^root/,/^adm/' passwd.txt3.字符比对取行
#取出文件中用户名为root的行
[root@Dezyan ~]# awk -F: '$1=="root"' passwd.txt
#取出文件中以nologin结尾的行
[root@Dezyan ~]# awk -F: '$NF~"nologin$"' passwd.txt4.数字比对取行
#取出用户uid大于6的行
[root@Dezyan ~]# awk -F: '$3>6' passwd.txt5.取列
#输出文件每一行最后一列的序号(以:或\或:\为分隔符)
[root@Dezyan ~]# awk -F "[:/]+" '{print NF}' passwd.txt
#输出文件的第一列和最后一列(以:或\或:\为分隔符)
[root@Dezyan ~]# awk -F "[:/]+" '{print $1,$NF}' passwd.txt6.BEGIN用法示例
#在输出文件第一列内容前,先输出“用户名”
[root@Dezyan ~]# awk -F: 'BEGIN{print "用户名"}{print $1}' passwd.txt
#让输出的第一列内容前,都有“用户名:”几个字
[root@Dezyan ~]# awk -F: '{print "用户名:"  $1}' passwd.txt7.综合运用
#输出文件最后一行的最后一列
[root@Dezyan ~]# awk -F: 'END{print $NF}' passwd.txt
#输出大于第5行到结尾的内容,并取出第3列
[root@Dezyan ~]# awk -F: 'NR>5{print $3}' passwd.txt
#输出用户uid大于6的行并输出用户名
[root@Dezyan ~]# awk -F: '$3>6{print $1}' passwd.txt
#将系统重不能登录的用户输出到nologin.txt文件中,并在文件的开头显示“不能登录的用户有:”##注:使用awk命令;不能使用管道符
[root@Dezyan ~/testdir]# awk -F: 'BEGIN{print "不能登录的用户有:"} $NF~"nologin$"{print $1}' /etc/passwd >> nologin.txt
不能登录的用户有:
bin
daemon
……………………

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/18373.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Win11专业版Docker安装、配置记录

零&#xff0c;系统环境配置 首先&#xff0c;安装Docker需要系统支持开启硬件虚拟化及Hyper-V功能&#xff0c;所以这里需要Win10/11的专业版&#xff0c;这样才能进行Docker for Windows软件安装。 1&#xff0c;硬件虚拟化 至于如何开启硬件虚拟化&#xff0c;自行百度即…

【Android】线程池的初见

引言 在Android当中根据用途分为主线程与子线程&#xff0c;主线程当中主要处理与界面相关的操作&#xff0c;子线程主要进行耗时操作。除了Thread本身以外&#xff0c;在Android当中还有很多扮演者线程的角色&#xff0c;比如AsyncTask&#xff08; 底层为线程池&#xff0c;…

春秋云镜-2022网鼎杯

flag1 进入网站&#xff0c;发现是wordpress&#xff0c;这种一般都不会有啥直接漏洞&#xff0c;应该是插件漏洞&#xff0c;或者弱口令 fscan扫描ip 好像没扫出啥东西 wp-login进入后台 爆破密码&#xff0c;弱口令admin&#xff0c;123456&#xff0c;之前lazysysadmin好…

js ResizeObserver API

一、ResizeObserver 是什么 ResizeObserver 是一个浏览器提供的 JavaScript API&#xff0c;用于监测一个元素的大小变化。它可以帮助开发者在元素的宽度或高度发生改变时执行某些操作&#xff0c;比如调整布局、重新渲染内容等。 二、Resize Observer和监听resize的区别及其…

《探索Zynq MPSoC》学习笔记(三)

引言&#xff1a;本文简要介绍FPGA器件技术发展以及当今FPGA器件的体系架构和特性。 第二章 FPGA、Zynq和Zynq MPSoC&#xff08;2&#xff09; 在本章涵盖的三种器件类型中&#xff0c;FPGA是建立时间最长的&#xff0c;也是Zynq和Zynq MPSoC器件PL元件的基础。因此&#xf…

支持用户注册和登录、发布动态、点赞、评论、私信等功能的社交媒体平台创建!!!

需要整体源代码的可以在我的代码仓下载https://gitcode.com/speaking_me/social-media-platformTest.git 社交媒体平台 描述&#xff1a;社交媒体平台需要支持用户注册、发布动态、点赞、评论、私信等功能。 技术栈&#xff1a; 前端&#xff1a;React, Angular, Vue.js后端…

跨平台WPF框架Avalonia教程 十五

ListBox 列表框 列表框从元素源集合中显示多行元素&#xff0c;并允许选择单个或多个。 列表中的元素可以组合、绑定和模板化。 列表的高度会扩展以适应所有元素&#xff0c;除非特别设置&#xff08;使用高度属性&#xff09;&#xff0c;或由容器控件设置&#xff0c;例如…

STL之mapset续|红黑树篇

STL之map&set续|红黑树篇 红黑树红黑树的规则红黑树的模拟实现 map&set的模拟实现封装map/set关于红黑树的复用红黑树模板参数set的const迭代器问题 红黑树 红黑树也是一种搜索二叉树&#xff0c;它通过颜色和规则控制树上没有一条路径会比其他路径长两倍&#xff0c;…

三、计算机视觉_03LeNet5及手势识别案例

1 LeNet-5基本介绍 LeNet-5是一种经典的卷积神经网络&#xff08;CNN&#xff09;架构&#xff0c;由Yann LeCun在1998年提出&#xff0c;用于手写数字识别&#xff0c;LeNet-5是卷积神经网络的开创性工作之一&#xff0c;它引入了卷积层、池化层和全连接层的组合&#xff0c;为…

【论文模型复现】深度学习、地质流体识别、交叉学科融合?什么情况,让我们来看看

文献&#xff1a;蓝茜茜,张逸伦,康志宏.基于深度学习的复杂储层流体性质测井识别——以车排子油田某井区为例[J].科学技术与工程,2020,20(29):11923-11930. 本文目录 一、前言二、文献阅读-基于深度学习的复杂储层流体性质测井识别2.1 摘要2.2 当前研究不足2.3 本文创新2.4 论文…

Uni-APP+Vue3+鸿蒙 开发菜鸟流程

参考文档 文档中心 运行和发行 | uni-app官网 AppGallery Connect DCloud开发者中心 环境要求 Vue3jdk 17 Java Downloads | Oracle 中国 【鸿蒙开发工具内置jdk17&#xff0c;本地不使用17会报jdk版本不一致问题】 开发工具 HBuilderDevEco Studio【目前只下载这一个就…

Unity-Editor扩展Odin + 自定义EditorWindow记录

没有上下文&#xff0c;可能你不知道这是什么&#xff08;关于Odin Inspector) 在写一个 Odin 插件的完整文章&#xff0c;卡了三天&#xff0c;之后会放出 使用Unity的人之中 1/10 可能会使用Editor扩展&#xff0c;而这之中的又1/10的 人可能会用Odin这个Editor的附加扩展 -…

FIFO系列 - FIFO使用中需要注意的若干问题

FIFO使用中需要注意的若干问题 文章目录 FIFO使用中需要注意的若干问题前言场景1:包数据FIFO设计之冗余法场景2、FIFO数据传输之流控总结前言 场景1:包数据FIFO设计之冗余法 场景:类似图像、文字等码流数据是不需要重复被访问的,因此使用FIFO进行缓存(如果需要被存储,一…

计算机毕业设计 | springboot+vue大学城水电管理系统 校园学校物业水电管理(附源码+文档)

1&#xff0c;绪论 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理大学城水电管理系统的相关信息成…

5-对象的访问权限

对象的访问权限知识点 对象的分类 在数据库中&#xff0c;数据库的表、索引、视图、缺省值、规则、触发器等等、都可以被称为数据库对象&#xff0c;其中对象主要分为两类 1、模式(schema)对象&#xff1a;模式对象可以理解为一个存储目录、包含视图、索引、数据类型、函数和…

药方新解:Spring Boot中药实验管理系统设计

3系统分析 3.1可行性分析 通过对本中药实验管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本中药实验管理系统采用SSM框架&#xff0c;JAVA作为开发语…

动态规划-完全背包问题——279.完全平方数

1.题目解析 题目来源 279.完全平方数——力扣 测试用例 2.算法原理 1.状态表示 完全背包问题通常都是使用一个二维数组来表示其状态&#xff0c;这里是 dp[i][j]&#xff1a;在[1,i]区间选择平方数&#xff0c;当此时已选择平方数的总和完全等于j时所选择的最小平方数个数 …

二叉树的层序遍历

一、题目 给定一个二叉树&#xff0c;返回该二叉树层序遍历的结果&#xff0c;&#xff08;从左到右&#xff0c;一层一层地遍历&#xff09; 例如&#xff1a; 给定的二叉树是{3,9,20,null,null,15,7}, 该二叉树层序遍历的结果是 [[3],[9,20],[15,7]] 二、解决方案 2.0 树…

模型训练过程的显存占用实测

依赖项说明 pip install nvitop pip install timm pip install peft后续的显存占用数据截图&#xff0c;均基于nvitop命令实现 1、模型显存占用说明 1.1 理论占用值 在 一文讲明白大模型显存占用&#xff08;只考虑单卡&#xff09;与大模型显存占用分析都对模型训练过程中…

后端分层解耦

引入 在上篇所举的例子中&#xff0c;我们将所有的代码均放在HelloControl方法之中&#xff0c;这样会导致代码的复用性、可读性较差&#xff0c;难以维护。因此我们需 三层架构 在之前的代码中&#xff0c;代码大体可以分为三部分&#xff1a;数据访问、数据逻辑处理、响应数…