文本编辑命令和正则表达式

一、 编辑文本的命令

正则表达式匹配的是文本内容,Linux的文本三剑客,都是针对文本内容。

文本三剑客

grep:过滤文本内容

sed:针对文本内容进行增删改查 (本文不相关)

awk:按行取列 (本文不相关)

文本三剑客都是按行进行匹配。

1.1 grep命令

grep的作用就是使用正则表达式来匹配文本内容。

选项:

  • -m:匹配几次之后停止,一行有多个匹配的内容也仅视为一次匹配
  • -v:取反,所有不包含匹配内容的行
  • -n:显示匹配内容所在的行号
  • -c:仅统计匹配的行数
  • -o:仅显示匹配的内容
  • -q:静默模式,不输出结果到终端。
grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
grep -m 1 root /etc/passwd
root:x:0:0:root:/root:/bin/bash
#注意到这一行有3个root
grep -m 2 root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
#第一行的3个root视为一次匹配grep -c root /etc/passwd
2
grep -o root /etc/passwd
root
root
root
root
grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
  • -A:after,跟数字,显示匹配到的内容所在行以及之后的几行
  • -B:before,跟数字,显示匹配到的内容所在行以及之前的几行
  • -C:跟数字,显示匹配到的内容所在行之前以及之后的几行
grep -n -A 3 mail /etc/passwd
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10-operator:x:11:0:operator:/root:/sbin/nologin
11-games:x:12:100:games:/usr/games:/sbin/nologin
12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologingrep -n -B 3 mail /etc/passwd
6-sync:x:5:0:sync:/sbin:/bin/sync
7-shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8-halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologingrep -n -C 3 mail /etc/passwd
6-sync:x:5:0:sync:/sbin:/bin/sync
7-shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8-halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10-operator:x:11:0:operator:/root:/sbin/nologin
11-games:x:12:100:games:/usr/games:/sbin/nologin
12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
  • -e:相当于逻辑或

  • -E匹配扩展正则表达式

  • -f:匹配两个文件,过滤出相同的内容,以第一个文件为准

  • -r:递归目录,目录下的文件内容,不处理软连接

  • -R:递归目录,目录下的文件内容包括软连接

1.2 sort命令:排序

sort:以行为单位,对文件内容进行排序,默认按照数字从小到大,再字母从a到z的顺序排列,数字在前,字母在后。排序时对每行的内容从第一个字符开始依次排序。

格式:常用2种方式

sort 选项 参数
cat file | sort 选项
  • -f:忽略大小写,相同字母默认大写排在前面

  • -b:忽略每行之前的空格

  • -n:按照数字大小进行排序,此时不是按照单个字符进行比较,而是行首所有连续的数字都能被识别,按照识别到的数字的大小进行排序。且此时字母排序优先级高于数字

  • -r:反向排序

  • -u:去重,相同内容仅显示一次

  • -o:把排序后的结果转存到指定文件

  • -k:指定字段(字符)进行排序

  • -t:指定字段的分隔符

1.3 uniq命令:去重

uniq去除连续重复的行,只显示一行

选项:

  • -c:统计连续重复的行的次数,且合并连续重复的行

  • -u:显示仅出现一次的行,包括不是连续出现的重复行

  • -d:仅显示连续重复的行,不包括非连续出现的的重复行

1.4 tr命令:替换和删除

tr :用来对标准输出的字符进行替换,压缩和删除。

格式:

tr 选项 参数

选项

  • -ctr -c 字符集1 字符集2 ,保留字符集1的字符,其他的字符用字符集2来进行替换,字符集要用单引号''括起来
  • -dtr -d 字符集 ,删除字符集的字符
  • -s :把字符集1的部分替换成字符集2的部分,也可以把连续重复出现的字符压缩成一个字符
echo abc | tr -c 'ab' 'e'
abee
echo abcd | tr -c 'ab' 'e'
abeee
echo abcd | tr -d 'ab'
cd
echo aaabbb | tr -s 'a'
abbb
echo ababab | tr -s 'b'
ababab		#非连续出现的字符无法进行压缩
echo ababab | tr -s 'ab'
ababab		#这种压缩字符只对单个字符有效,对字符串无效
echo ababab | tr -s 'a' 'c'
cbcbcb

sedtr功能更强,常用于正则表达式。

1.5 cut命令:快速裁剪

cut可以对字段进行截取和裁剪

选项:

  • -d :指定字段的分隔符,指定的分隔符用' '包裹,不指定-d默认分隔符为横向制表符(tab键)
  • -f:对字段进行截取,指定输出的字段,和-d连用,如1-3,输出1到3字段,2,4,输出2和4字段
  • -c :以字符为单位进行截取,不常用
  • -b :以字节为单位进行截取,不常用
  • --complement:排除指定的字段后再输出
  • --output-delimiter:更改输出内容的分隔符,指定改变的分隔符用=连接
head -n1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
head -n1 /etc/passwd | cut -d ':' -f 1-4
root:x:0:0
head -n1 /etc/passwd | cut -d ':' -f 1,6
root:/root
head -n1 /etc/passwd | cut -d ':' --complement -f 2-4
root:root:/root:/bin/bash
head -n1 /etc/passwd | cut -d ':' -f 1-4 --output-delimiter='@'
root@x@0@0

1.6 split命令:文件拆分

split :大文件拆分成若干小文件

选项:

-l :按行来进行分割

-b :按照大小来进行分割(单位K M G …)

ls
test.txt
split -l 20 test.txt ykw
#格式:-l 指定行数 要分割的文件 分割后的文件的前缀名
ls
test.txt  ykwaa  ykwab  ykwac
#分割后的文件 以指定的ykw为开头,排列方式后跟 aa ab ac ... az ba ... bz ...

1.7 文件合并

  • cat命令
  • paste命令

cat合并和paste合并的区别?

cat是上下合并;paste是左右合并

1.8 练习

问:查看当前网络状态中有多少个ESTABLISHED和LISTEN。

ss -antp | grep -v '^State' | cut -d ' ' -f 1 | sort | uniq -c

其中 ^State 表示以State开头,-v是取反

二、正则表达式

正则表达式是由一类特殊字符以及文本字符所编写的一个模式,模式又来匹配文件当中的内容(字符)。校验我们输入的内容是否满足规定、格式、长度等等要求。

主要用来匹配文本的内容命令的结果

区别于通配符:通配符只能用于匹配文件名和目录名,不能匹配文件的内容和命令结果。

2.1 基本正则表达式

2.1.1 元字符(字符匹配)

. :匹配任意单个字符

\ :转义符:恢复字符的本意

[] :匹配指定的范围内的任意单个字符或者数字区分大小写,也可以用1-5a-t这样的方式范围匹配

[^] :取反,表示匹配除了^之后的内容

^ :匹配以^之后内容开头的字符

^# :匹配以#开头的行

^$ :匹配空行

[ ]:中括号里输入空格,就可以匹配空格

注:匹配内容两边需要加引号,单引号双引号都可以

2.1.2 次数匹配

表示次数,匹配字符出现的次数:

* :匹配*前面的字符0次或者多次

  1. 匹配前一个元素零次或多次:
    • a*: 匹配零个或多个连续的字符 ‘a’。
    • 123*: 匹配 ‘12’ 后面跟零个或多个 ‘3’ 的连续序列,如 ‘12’, ‘123’, ‘1233’, ‘12333’ 等。
  2. 贪婪匹配:
    • .*: 匹配任意字符(除换行符外)零次或多次。这通常用于匹配任意长度的文本。
    • a.*b: 匹配以 ‘a’ 开头,以 ‘b’ 结尾的字符串,中间可以是任意字符。
  3. 注意事项:
    • * 是贪婪的,它会尽可能多地匹配字符。如果需要非贪婪匹配(尽可能少地匹配),可以使用 *?
  4. 与其他元字符结合使用:
    • .*: 匹配任意长度的字符序列。
    • [a-z]*: 匹配任意小写字母序列,长度可以为零。
    • \d*: 匹配任意数字序列。

\? :匹配前面的字符0次或者1次。如'ab\?c'可以匹配到abcac

\+ :匹配前面的字符至少出现一次

\{n\} :匹配前面的字符n次,且前面的字符必须是连续出现n次才能匹配

\{m,n\} :匹配前面的字符至少m次,至多n次,超出的不显示

\{,n\} :匹配前面的字符至多n次

\{m,\}:匹配前面的字符至少m次

2.1.3 位置锚定

对行匹配:

^ :行首锚定,以什么为开头,如^3 ^[a-z]

$ :行尾锚定,以什么为结尾,如t$ [3-9]$

特别的:对于^text&形式,是整行匹配,即匹配到的行的内容只能是text,字符和字符数量完全匹配。

^$:匹配空行,可以理解为行首和行尾之间为空,即空行

对词匹配:

\<或者\b :词首锚定,匹配单词的左侧,连续的数字、字母、下划线都算作单词的内部,写在匹配内容的左边

\>或者\b :词尾锚定,匹配单词的右侧,写在匹配内容的右边

\btext\b或者\<text\>表示整词匹配,只能匹配到内容为text的文本,字符和字符数量完全匹配。

2.1.4 分组和逻辑关系

\(\) :表示分组,把括号内的内容视为一个整体

\| :表示逻辑或

2.2 扩展正则表达式

扩展正则表达式和基本正则表达式的规则完全一致,唯一的区别就是扩展正则表达式大部分时候不需要转义符\。除了\b \< \>锚定词首词尾的时候不能去掉转义符\,表示()而不是分组时也要加\

grep -E支持扩展正则表达式。

egrepgrep -E一个效果。

2.3 练习

  1. 使用正则表达式把下列邮箱全部匹配出来
vim d.txt
cicifireway@126.com
544564317@qq.com
CICIfireway@12a.com
aabbcc5566@163.com
cat d.txt | grep -E '[a-zA-Z0-9]+@[a-z0-9]+\.[com]+'
  1. 匹配下列电话
vim e.txt
cicifireway@126.com
544564317@qq.com
CICIfireway@12a.com
aabbcc5566@163.comcat e,txt | grep -E '[a-zA-Z0-9]+@[a-z0-9]+\.[com]+'
  1. 显示/etc/passwd中以sh结尾的行;

    cat /etc/passwd | egrep 'sh$'
    
  2. 查找/etc/inittab中含有“以s开头,并以d结尾的单词”模式的行

    cat /etc/inittab | egrep '\<s[a-zA-Z]*d\>'
    
  3. 查找ifconfig命令结果中的1-255之间的整数;

    ifconfig | egrep '\b([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b'
    
  4. 在/etc/passwd中取出默认shell为bash的行;

    cat /etc/passwd | egrep 'bash$'
    
  5. 高亮显示passwd文件中冒号,及其两侧的字符

    cat /etc/passwd | egrep '.?:{1,}.?'
    

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子电气架构——由NRC优先级引起的反思

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

一文详解去噪扩散概率模型(DDPM)

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

Django之云存储(二)

一、Django使用云存储 建立项目 django-admin startproject project_demo创建子应用 python manage.py startapp app_name修改配置文件,设置模板视图路径 settings.py TEMPLATES = [{BACKEND: django.template.backends.django.DjangoTemplates,DIRS: [os.path.join(BASE_DIR,…

如何在 MySQL 中导入和导出数据库以及重置 root 密码

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 如何导入和导出数据库 导出 要导出数据库&#xff0c;打开终端&#xff0c;确保你没有登录到 MySQL 中&#xff0c;然后输入以下命令&…

sd StableDiffusion库学习笔记

目录 torchmetrics准确率计算 ConsistencyDecoder DeepSpeed realesrgan BasicSR超分辨率&#xff0c;去噪&#xff0c;去模糊&#xff0c;去 JPEG 压缩噪声 segment_anything mmengine controlnet_aux accelerate transfersformer pytorch_fid einops compel tra…

Ike-scan一键发现通过互联网的IPsec VPN服务器(KALI工具系列二十八)

目录 1、KALI LINUX 简介 2、Ike-scan工具简介 3、信息收集 3.1 目标主机IP&#xff08;服务器&#xff09; 3.2 KALI的IP 4、操作示例 4.1 简单扫描 4.2 范围扫描 4.3 扫描多个目标 4.4 输出扫描结果 4.5 特殊扫描 5、总结 1、KALI LINUX 简介 Kali Linux 是一个功…

基于Vue-cli脚手架搭建项目使用ElementUI组件

项目结构 node_modules 项目依赖的外部组件文件放在此处,例如vue public index.html是对外提供的唯一的html文件 src assets 存放静态文件 例如图片 css js等文件 components 里面存放的是组件 App.vue是组件 main.js是项目配置文件 package.json存放的是项目依赖的…

IEEE RAL 具有高运动性能的仿旗鱼机器人协同运动机制研究

水下机器人作为军用侦察、监测及攻击装置备受关注&#xff0c;目前传统水下机器人普遍采用螺旋桨作为推进器&#xff0c;但高噪音、高能耗等问题限制了应用范围。鱼类通过自然选择进化出优异的运动性能&#xff0c;特别是在海洋中游动速度快、机动性强的旗鱼。为了探究快速和高…

redis持久化操作【随记】

持久化 Redis它是将数据保存到内存当中,内存里的数据最大特点: 断电易失.保存在内存的数据就没有了.如果如果这些数据还有用,业务使用啥的,不能就让它这么没有了. redis当中提供持久化机制, 说白了,将内存的数据 —-> 写入到磁盘. –> 持久化. 1 rdb方式 redis database,…

车载测试系列:CAN协议之远程帧

远程帧&#xff08;也叫遥控帧&#xff09;&#xff1a;是接收单元向发送单元请求发送具有标识符的数据所用的帧&#xff0c;由 6 个段组成&#xff0c;没有数据段。 当某个节点需要数据时&#xff0c;可以发送远程帧请求另一节点发送相应数据帧。 简单的说&#xff1a;发起方…

示例:推荐一个基于第三方开源控件库DataGridFilter封装的FilterColumnDataGrid,可以像Excel拥有列头筛选器

一、目的&#xff1a;基于第三方开源控件库DataGridFilter封装的FilterColumnDataGrid&#xff0c;可以像Excel拥有列头筛选器&#xff0c;感兴趣的可以去下方链接地址查看开源控件库地址。本控件封装的目的在于将第三方库的皮肤和样式封装到皮肤库中可统一设置样式&#xff0c…

【Python Cookbook】S03E01 对数值进行取整 int() round() math.ceil() math.floor() 函数

目录 问题解决方案int 函数round 函数math.floor() 函数math.ceil() 函数 讨论&#xff08;1&#xff09;参数 ndigits 可以为负数&#xff08;2&#xff09;不要与格式化混为一谈&#xff08;3&#xff09;精度上有需求请选择 decimal 在 Python 中对整数和浮点数进行数学计算…

hdfs java客户端使用,文件上传下载,预览的实现

1. 环境部署 1.1 Linux hadoop集群搭建 Hadoop大数据集群搭建&#xff08;超详细&#xff09;_hadoop集群搭建-CSDN博客 1.2 windows hadoop util 安装 Hadoop——Windows系统下Hadoop单机环境搭建_hadoop windows开发环境搭建-CSDN博客 1.3 温馨提示&#xff0c;如果要使用ja…

QT中QSettings的使用系列之三:QSettings操作注册表

1、核心代码 #include "widget.h" #include "ui_widget.h" #include <QSettings> #include <QDebug>Widget::Widget

轮廓系数【python,机器学习,算法】

用途 使用轮廓系数评估聚类质量。聚类质量的评价方法&#xff0c;本质上&#xff0c;都是根据簇内和簇间的效果对比进行衡量。 定义 假设样本集合为 S a 1 , a 2 , a 3 , . . . , a n S{a_1,a_2,a_3,...,a_n} Sa1​,a2​,a3​,...,an​&#xff0c;该样划分成 4 个聚类 G 1…

[数据概念]一分钟弄懂数据治理

“ 数据治理是数据资产化的起点。” 数据资产化的趋势正愈演愈烈。然而&#xff0c;我们必须清醒地认识到&#xff0c;资产化的前提条件是拥有实际的数据资产。那么&#xff0c;这些宝贵的数据资产究竟源自何处呢&#xff1f;答案显而易见&#xff0c;它们源自企业日常运营中积…

任务5.2 掌握DStream基础操作

实战&#xff1a;DStream基础操作 了解DStream编程模型&#xff1a;DStream是Spark Streaming中对实时数据流的抽象&#xff0c;可以看作一系列持续的RDD。DStream可以通过外部数据源获取或通过现有DStream的高级操作获得。 操作本质&#xff1a;DStream上的操作最终会转化为对…

kettle从入门到精通 第七十三课 ETL之kettle kettle调用http分页接口教程

场景&#xff1a;kettle调用http接口获取数据&#xff08;由于数据量比较大&#xff0c;鉴于网络和性能考虑&#xff0c;所以接口是个分页接口&#xff09;。 方案&#xff1a;构造页码list&#xff0c;然后循环调用接口。 1、总体设计 1&#xff09;、初始化分页参数pageNum1…

[MYSQL] 数据库基础

1.什么是数据库 从数据库的名字可以看出,它是用来操作(增删查改....)数据的,事实上也的确如此,通过数据库,我们可以更方便.更高效的来操作.管理数据 以文件形式存储数据的缺点 文件的安全问题文件不利于数据的查询和删除文件不利于存储海量数据操作文件并不方便 为了解决上述问…

深度神经网络DNN概念科普

深度神经网络DNN概念科普 深度神经网络&#xff08;Deep Neural Network, DNN&#xff09;是机器学习领域中一类具有多层结构的神经网络模型&#xff0c;它能够通过学习数据中的复杂模式来解决非线性问题。下面是对深度神经网络的详细解析&#xff1a; 基本组成部分 输入层&…