首页 > 系统相关 >SHELL(04)

SHELL(04)

时间:2024-03-30 10:32:57浏览次数:26  
标签:SHELL grep 04 666 正则 sed user txt

SHELL(03)

正则表达

  • Regular Expression 简称为**[ Regex ] [ RegExp ]**

  • 正则表达式是一种用于匹配文本模式的工具 , 常用于计算机程序设计中进行文本搜索和文本替换等操作.

  • 使用 “一串符号” 来描述有共同属性的数据

基础正则列表
  • 正则符号在使用时需要 " " 引号引起来

’ ^ ‘’ 匹配行首
’ $ ’ 匹配行尾
’ [ ] ’ 集合 , 匹配集合中的任意单个字符
’ [ ^ ] ’ 对集合取反
’ . ’ 匹配任意单个字符 , 不能为空
’ * ’ 匹配前一个字符任意次数[ * 不允许单独使用 ]
’ \ { n , m \ } ’ 匹配前一个字符 n 到 m 次
’ \ { n\ } ’ 匹配前一个字符 n 次
’ \ { n , \ } ’ 匹配前一个字符 n 次及以上
’ \ { \ } ’ 组合为整体 , 保留


扩展正则列表

’ + ’ 最少匹配一次
’ ? ’ 最多匹配一次
’ { n , m } ’ 匹配前一个字符 n 到 m 次
’ ( ) ’ 组合为整体 , 保留
’ | ’ 或者
’ \b ’ 单词边界
’ \ < ’ 单词的开头
’ \ > ’ 单词的结尾
’ \ w ’ 匹配数字 , 字母 , 下划线 , 不匹配其他符号
’ \ s ’ 匹配空格 , tab键
’ \ d ’ 匹配数字 , 和 [ 0-9 ] 等效

grep ^root user                #找以root开头的行
grep bash$ user                #找以bash结尾的行
grep ^$ user                    #找空行
grep -v ^$ user                #显示除了空行的内容
grep "[root]" user            #找r、o、t任意一个字符
grep "[rot]" user                #效果同上
grep "[^rot]" user            #显示r或o或t以外的内容
grep "[0123456789]" user        #找所有数字
grep "[0-9]" user                #效果同上
grep "[^0-9]" user            #显示数字以外内容
grep "[a-z]" user                #找所有小写字母
grep "[A-Z]" user                #找所有大写字母
grep "[a-Z]" user                #找所有字母
grep "[^0-9a-Z]" user            #找所有符号

grep "." user         #找任意单个字符,每个字符都可以理解为任意字符
grep "r..t" user      #找rt之间有2个任意字符的行
grep "r.t" user       #找rt之间有1个任意字符的行
grep "*" user         #错误用法,*号不能单独使用
grep "ro*t" user      #找rt,中间的o有没有都行,有几次都行
grep ".*" user        #找任意,包括空行 
		#[.]与[*]的组合在正则中相当于通配符的效果
		
grep "ro\{1,2\}t" user        #找rt,中间的o可以有1~2个
grep "ro\{2,6\}t" user        #找rt,中间的o可以有2~6个
grep "ro\{1,\}t" user            #找rt,中间的o可以有1个以及1个以上
grep "ro\{3\}t" user             #找rt,中间的o必须只有有3个
grep "\(0:\)\{2\}" user        #找连续的2个0:  
		#小括号的作用是将字符组合为一个整体

以上命令均可以加[ -E ]选项并且去掉所有 [ \ ],改成扩展正则的用法

  • [ grep “ro \ { 1 , \ }t” user ] =====> [ grep -E “ro{ 1 , }t” user ] ====> [ egrep "ro{ 1 , }t " user]
grep "ro\{1,\}t" user           #使用基本正则找o出现1次以及1次以上
egrep "ro{1,}t" user            #使用扩展正则,效果同上,比较精简
egrep "ro+t" user               #使用扩展正则,效果同上,最精简
grep "roo\{0,1\}t" user        #使用基本正则找第二个o出现0~1次
egrep "roo{0,1}t" user        #使用扩展正则,效果同上,比较精简
egrep "roo?t" user            #使用扩展正则,效果同上,最精简
egrep "(0:){2}" user            #找连续的2个0: 
egrep "root|bin" user            #找有root或者bin的行
egrep  "the\b" abc.txt     #找the,右边不允许出现数字、字母、下划线
egrep  "\bthe\b" abc.txt     #the两边都不允许出现数字、字母、下划线
egrep  "\<the\>" abc.txt      #效果同上
  • 常利用工具

    • [ grep ]

    • [ egrep ]

[ egrep ] 过滤工具
  • 文本处理顺序

    • 以行为单位 , 逐行进行处理
    • 默认只输出与表达式相匹配的文本行
  • 用法

    • egrep [ 选项 ] “正则表达式” 文件
    • 前置命令 | egrep [ 选项 ] “正则表达式”
  • 常用命令

    • [ -i ] : 忽悠字母大小写
    • [ -v ] : 条件取反
    • [ -c ] : 统计匹配的行数
    • [ -q ] : 静默 , 无任何输出 , 一般用于检测 , 等同于 /dev/null
    • [ -n ] : 显示出u匹配结果所在的行号
    • [ -color ] : 标红显示匹配字串

[ sed ]基本用法

  • 流式编辑器

    • [ 非交互式 ] 对文本进行增 , 删 , 改 , 查等操作
    • 逐行处理 , 并将结果输出到屏幕
  • 格式基本操作方法

    • 前置命令 | sed [ 选项 ] ‘条件指令’

    • sed [ 选项 ] ‘条件指令’ 文件… …

  • 常见的选项

    • [ -n ] #屏蔽默认输出 , 默认sed会读出文档的全部内容

    • [ -r ] #支持扩展正则

    • [ -i ] #修改源文件 , 没有 -i 就只是显示在终端中 , 不修改文件内容

      • 条件可以是行号或者 /正则/ , 没条件时默认所有行都执行指令

      • 指令可以是 [ p ] 输出 , [ d ] 删除 , [ s ] 替换 , [ ! ] 取反

      • [ a ]行下追加

      • [ i ]行上添加

      • [ c ]替换整行

  • 条件

    • 可以是行号 [ 1 ,2 ,3 ] 或者 /正则/ [ -r ]
    • 行号可以使用单个数字表示单行
    • 或者 3,5 表示连续的多行
    • 省略条件 , 则默认逐行处理全部文件
    • 匹配正则时 , 需要使用 / /
sed -n/-nr ‘p’
sed -n  'p'  user                    #输出所有行
sed -n  '1p'  user                #输出第1行
sed -n  '2,4p'  user                #输出2~4行
sed -n  '2p;4p'  user                #输出第2行与第4行
sed -n  '3,+1p' user                #输出第3行以及后面1行
sed -n  '1~2p' /etc/passwd            #输出奇数行
		#[ a~b ] 在 a行 之后 , 再走 b行 再显示
sed -n '/root/p' user           #输出包含root的行
sed -nr '/^root|^bin/p' user    #输出以root开头的行或bin开头的行
              # | 是扩展正则,需要r选项
sed -n '1!p' user            #输出除了第1行的内容,!是取反
sed -n '$p'  user            #输出最后一行
sed -n '='  user             #输出行号,如果是$=就是最后一行的行号
sed ‘d’
sed  '3,5d' a.txt             #删除第3~5行
sed  '/xml/d' a.txt            #删除所有包含xml的行
sed  '/xml/!d' a.txt         #删除不包含xml的行,!符号表示取反
sed  '/^install/d' a.txt    #删除以install开头的行
sed  '$d' a.txt                #删除文件的最后一行
sed  '/^$/d' a.txt             #删除所有空行
sed ‘s/旧内容/新内容/选项’
sed 's/2017/6666/' shu.txt      #把所有行的第1个2017替换成6666
sed 's/2017/6666/2' shu.txt     #把所有行的第2个2017替换成6666
sed '1s/2017/6666/' shu.txt     #把第1行的第1个2017替换成6666
sed '3s/2017/6666/3' shu.txt    #把第3行的第3个2017替换成6666
sed 's/2017/6666/g' shu.txt     #所有行的所有个2017都替换
sed '/2024/s/2017/6666/g' shu.txt    
					#找含有2024的行,将里面的所有2017替换成6666
  • 把 [ /bin/bash ] 换成 [ /sbin/sh ]
sed -i '1s/bin/sbin/' user      #传统方法可以一个一个换,先换一个
sed -i '1s/bash/sh/' user       #再换一个

或者

sed 's/\/bin\/bash/\/sbin\/sh/' user    #使用转义符号可以成功,但不方便
sed 's!/bin/bash!/sbin/sh!' user        #最佳方案,更改s的替换符
sed 's(/bin/bash(/sbin/sh(' user        #替换符号可以用键盘上大部分字符
sed ‘a’ / 'i ’ / ‘c’
sed 'a 666' user    		#所有行的下面追加666
sed '1a 666' user   		#第1行的下面追加666
sed '/^bin/a 666' user  	#在以bin开头的行的下面追加666
sed 'i 666' user 	 		#所有行的上面添加666
sed '5i 666' user   		#第5行的上面添加666
sed '$i 666' user  			#最后1行的上面添加666
sed 'c 666' user   			#所有行都替换成666
sed '1c 666' user  			#替换第1行为666
特殊替换
cat abc.txt                              
100  laowang
98   gangge
59   laoniu

sed -r 's/([0-9]+)(\s+)([a-z]+)/\3\2\1/' abc.txt

cat abc.txt                              
laowang  100  
gangge   98   
laoniu   59   

’ ( ) ’ 表示保留内容

([0-9]+) 代表任意数字串

([\n]+) 代表任意长度的空格

([a-z]+) 代表任意小写的字母串

’ \3\2\1 ’ 代表前面所设置的文本规格的粘贴 , 按照3 2 1 的顺序粘帖

标签:SHELL,grep,04,666,正则,sed,user,txt
From: https://blog.csdn.net/2401_82773077/article/details/137167344

相关文章

  • SHELL(01)
    Shell基础Shell:[解释器]在Linux内核与用户之间的解释器程序通常指/bin/bash,这是系统默认解释器负责向内核翻译及传达用户/程序指令相当于操作系统的“外壳”Shell的使用方式交互式指令---------------命令行人工干预智能化程度高逐条解析执行,效率低......
  • 解决ubuntu22.04的ssh问题--userauth_pubkey: key type ssh-rsa not in PubkeyAccepte
    问题在我新安装了一台ubuntu22.04的服务器时,配置远程服务器正常情况下,只要把握本机的公钥写到被远程主机对应用户的.ssh/authorized_keys文件中就好了但是,今天发现,虽然设置进去了,但是远程还是提示需要密码但是并不是所有的主机是这样的,同样是ubuntu22.04的服务器还是能够免......
  • L2-047 锦标赛
    这题没做出来,查了一些博客,下面是我比较能接受的一种写法。读完题可以发现这是一个满二叉树,并且可以得到每场比赛失败者的信息(决赛是胜利者和失败者都可以得到)对于一场比赛,它的胜利者要么是左孩子中的胜利者,要么是右孩子中的胜利者,那我们就可以先假设是左孩子的胜利者,如果不行就......
  • 【QT+QGIS跨平台编译】040:【geos_c+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
    点击查看专栏目录文章目录一、geos_c介绍二、文件下载三、文件分析四、pro文件五、编译实践一、geos_c介绍  GEOS_C(GEOSC++接口)是GEOS库的C语言版本,它提供了一套丰富的API,允许开发者在C++程序中执行复杂的几何形状处理和空间关系分析。GEOS_C是基于JTS(Jav......
  • 04基本数据类型
    【一】数字类型(int/float)(1)作用整数类型用于表示整数,是一种基本的数字类型,广泛用于表示计数、索引等整数值。浮点类型用于表示带有小数部分的数值,适用于需要更精确表示的情况。(2)定义#【1】整型--intnumber=18#查看内存地址print(id(number))#140728323794248......
  • 使用cmd或PowerShell计算文件夹中的文件数量
    一、echo"CD需统计目录(PowerShell命令)"echo"1.统计文件和文件夹数(不会递归工作,只计算第一级元素)"(Get-ChildItem|Measure-Object).Countecho"2.统计文件夹数(不会递归工作,只计算第一级元素)"(Get-ChildItem-Directory|Measure-Object).Countecho"3.统计文件夹中的......
  • Ubuntu中如何配置ssh,连接xshell
    这里演示Ubuntu中配置ssh服务,并且使用xshell连接Ubuntu中的root用户1.如果之前没有配置过root密码的话这里可以配置一下root的密码,如果之前配置过,直接登录进去即可。sudopasswdroot然后填写自己的登录密码,这时密码不会显示,但确实填进去了,然后配置自己的root密码,然后确定......
  • 数仓 - [04] 数仓分层
        数仓分层是一种将数据仓库按照不同的层级进行组织和管理的方法。每个层级具有不同的功能和目的,旨在支持数据分析、报告和决策等不同的业务需求。 一、数仓分层的意义和目的  数仓分层的主要目的是实现数据的高效访问和分析,提高数据的可用性和性能,同时提供更好的灵......
  • Avalonia 运行在Ubuntu20.04上,记录发布到运行的过程,已解决默认字体问题
    目录1.安装.NET8.0环境2.发布Avalonia程序3.默认字体问题解决Demo程序下载(开箱即用):https://download.csdn.net/download/rotion135/890489371.安装.NET8.0环境下载微软dotnet安装脚本:sudowgethttps://dot.net/v1/dotnet-install.sh-Odotnet-install.sh运行......
  • 手把手教你做阅读理解题-初中中考阅读理解解题技巧004-A new way of working-一种新型
    PDF格式公众号回复关键字:ZKYD004阅读理解技巧,在帮助读者有效获取和理解文本信息方面发挥着重要作用,熟练掌握如下6个技巧,可快速突破阅读理解1预览文章结构在开始深入阅读之前,快速浏览文章的标题、段落开头和结尾,可以迅速把握文章的主题、大致内容和结构标题通常能概括文章......