首页 > 系统相关 >13、Linux文本三剑客

13、Linux文本三剑客

时间:2023-10-22 09:02:44浏览次数:33  
标签:13 sed Desktop SED Linux txt root localhost 三剑客

Linux文本三剑客

目录

都要最基本的功能--查看

以列为单位查看的话awk命令更快;以行为单位查看的话sed命令更好;查看某个字段以grep更方便。

一、grep命令

Linux grep命令用于查找文件里符合条件的字符串。grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 - ,则grep指令会从标准输入设备读取数据。

有时候我们发现并不需要列出文件的全部内容,而是从文件中找到包含指定信息的那些行,要实现这个目的,可以使用grep命令。英文 global regular expressions print 就是grep命令的全称。

grep命令是我们常用的一个强大的文本搜索命令。也是一个文本过滤工具,用于查找文件里符合条件的字符串。
命令:grep [参数] [关键字] [文件名]
注意:
	可以通过 grep --help 查看grep的帮助信息
参数:
-c : 只输出匹配行的计数(常用)
-i : 不区分大小写
-h : 查询多文件时不显示文件名
-l : 查询多文件时只输出包含匹配字符的文件名
-n : 显示匹配行及行号(常用)
-s : 不显示不存在或无匹配文本的错误信息
-v : 显示不包含匹配文件的所有行(常用)
-w : 搜索整个词
-A NUM : 同时打印出之后的NUM行
-B NUM : 同时打印出之前的NUM行
-C NUM : 显示之前的NUM行,之后的NUM行
-o : 仅显示匹配到目标字符串(常用)
-E : 支持使用扩展的正则表达式字符串
-q : 静默模式,不输出任何信息

grep中常用正则表达式(略)

示例:
①[root@localhost ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
②[root@localhost ~]# ifconfig | grep inet
③[root@localhost ~]#  ifconfig | grep inet | grep -v inet6		//不包括inet6的内容
        inet 192.168.126.131  netmask 255.255.255.0  broadcast 192.168.126.255
        inet 127.0.0.1  netmask 255.0.0.0
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        
//|管道符:将前面命令字的结果作为后面命令字的执行环境。

二、sed命令

我们知道,vim采用的是交互式文本编辑模式,你可以用键盘命令来交互性地插入、删除或替换数据中的文本。但sed命令不同,它采用的是流编辑模式,最明显的特点是:在sed处理数据之前,需要预先提供一组规则,sed会按照此规则来编辑数据。

sed是文件编辑工具。因为它编辑文件是以”行“为单位的。

命令:sed [参数] '<匹配条件>/[动作]' [文件名]		(匹配条件与动作可以在不同位置;条件以/分隔)

参数:
参数为空:表示sed的操作效果,实际上不对文件进行编辑
-e<script>或--expression=<script>:以选项中指定的script来处理输入的文本文件。
-f<script文件>或--file=<script文件>:以选项中指定的script文件来处理输入的文本文件。
-i(常用):直接修改文件内容(表示对文件进行编辑)(危险操作)
-h或--help:显示帮助。
-n(常用)或--quiet或--silent:仅显示script处理后的结果(取消静默输出/默认情况下,sed 会在所有的脚本指定执行完毕后,会自动输出处理后的内容,而该选项会屏蔽启动输出,需使用 print 命令来完成输出。)。
-V或--version:显示版本信息。

匹配条件:
匹配条件分为两种:数字行号或者关键字匹配
关键字匹配格式:‘/关键字/’	(不区分单引号和双引号)
[root@localhost Desktop]# sed -i "2s/sed/SED/2" sed.txt		//sed.txt文件已存在(以下操作均是),且可对该文件进行直接修改。
数字匹配格式:
[root@localhost ~]# sed -n "1,4p" /etc/passwd	//查看1到4行的内容

动作详解:
a:在匹配到的内容下一行增加内容
i:在匹配到的内容当前行增加内容(目前的上一行)
g:替换所有
d:删除匹配到的内容(后面不带其他参数)
s:替换匹配到的内容
p:查看指定内容,通常p会与参数sed -n一起运行
e:多点编辑
c:取代,c的后面可以接字串,这些字串可以取代n1,n2之间的行

注意:参数的-i与动作的i的区别。
示例:
[root@localhost Desktop]# cat sed.txt 
sed sed sed
sed sed sed
sed sed sed
sed sed sed
[root@localhost Desktop]# sed -i 's/sed/SED/' sed.txt//将第一列的小写sed全都替换成大写SED。(不写行默认为第一行)
[root@localhost Desktop]# cat sed.txt 			    //以”行“为单位的概念。
SED sed sed
SED sed sed
SED sed sed
SED sed sed
[root@localhost Desktop]# sed -i '4s/SED/sed/' sed.txt 	//将第四行第一列的大写SED替换成小写sed。	
[root@localhost Desktop]# cat sed.txt 
SED sed sed
SED sed sed
SED sed sed
sed sed sed
//比较bug一点:(行变换正常进行;变换列时必须按匹配条件的为列)
[root@localhost Desktop]# sed -i '2s/sed/SED/2' sed.txt  	//将第二行第三列的小写sed替换成大写SED。	
[root@localhost Desktop]# cat sed.txt 	//有小写sed出现的列叫做第一列,所以第二行第三列在当前文本下为第二行第二列
SED sed sed								//而第二行第一列的大写的SED匹配不上小写的sed,所以当列失效
SED sed SED
SED sed sed
sed sed sed

sed -i "s/sed/SED/g" sed.txt 		//将所有行所有列将小写sed替换成大写SED。
sed -i "2s/sed/SED/2" sed.txt 		//替换第二行第二列(列以匹配条件为列)前面一个2表示行,后一个2表示列。
[ root@Lin Desktop]# sed -i "2a\SED" sed.txt	//在第二行的下面添加一个SED。
[ root@Lin Desktop]# sed -i "2,4a\123" sed.txt	//在第二行到第四行的下面都增加一个123。
[ root@Lin Desktop]# sed -i "2,4i\asd" sed.txt	//在第二行到第四行的上面都增加一个asd。
[ root@Lin Desktop]# sed -i "2,9d" sed.txt 		//删除第二行到第九行(直接指令行删除,不用条件)。

三、awk命令

awk是一个功能非常强大的文档查看和编辑工具,它不仅能以行为单位还能以列为单位处理文件。

命令:awk [参数] '[动作]' [文件名]

常见参数:(参数的话使用单引号后缀双引号都行)
-F:指定输出列的分隔符,与内置变量OFS相同(回显结果的分隔符)
-f:调用脚本
-v:定义变量
	
常见动作:
print:显示内容
	$0:显示当前行所有内容
	$n:显示当前行的第n列内容
动作组成:(命令使用大括号;代码使用双斜杠)
	BEGIN{ 命令 }:初始代码块,主要和变量相关
	/pattern(if...)/{ 命令 }:匹配、执行代码块、字符串等
	END{ 命令 }:结束代码块,主要和信息输出相关
内置变量:
	FILENAME:当前输入文件的文件名,该变量是只读的
	NR:指定显示行的行号
	NF:输出当前行的列数
	OFS:输出格式的列分隔符,缺省是空格
	FS:输入文件的列分融符,缺省是连续的空格和Tab
	
注意:在参数当中的-F和内置变量当中的FS/OFS都是指定列的分隔符。
示例:
①以列为单位直接显示数据(以”列“为单位的概念。且awk也可以以行为单位)
[root@localhost ~]# awk '{print $1}' /proc/meminfo	 //打印指定列($1表示打印第一列),默认以空格为分隔符。
MemTotal:											//这里的动作必须以单引号包围,双引号识别不了。
...
[root@localhost Desktop]# awk '{print $1,$2}' /proc/meminfo //每行输出结果以空格分隔,且每行有两个整体。
MemTotal: 995672						 //打印第一列和第二列
...

②[root@localhost Desktop]# cat /proc/meminfo  //(在/proc/meminfo文件当中有一条名为Dirty的消息)
Dirty:                60 kB
...
[root@localhost Desktop]# awk '/Dirty/{print}' /proc/meminfo   	//匹配行,直接打印整行
//执行结果Dirty:                 0 kB  ----直接回显该条信息

③分隔符
(-F)
[root@localhost Desktop]# awk -F ":" '{print $0}' /proc/meminfo 	//打印指定列($0表示打印所有列)
MemTotal:         995672 kB				//每行输出结果以冒号分隔,且每行只有两个整体。
MemFree:           67500 kB				//假如以:分割的话,那么有空格(无论多少个空格/tab键也算)也当作一个整体。
...
[root@localhost ~]#  awk -F ":" '{print $1,$2}' /proc/meminfo
MemTotal         995672 kB				//打印第一列和第二列,输出结果以冒号分隔(冒号不显示出来)
MemFree           67600 kB
...
(OFS)
[root@localhost Desktop]# awk 'BEGIN{OFS=","}{print NR,$0}' /proc/meminfo //设置显示分隔符为“,”,并显示内容
1,MemTotal:         995672 kB	(逗号前后分别为一个整体)(注意引号的嵌套)
2,MemFree:           71236 kB
...

awd进阶实践:
④[root@localhost ~]# ll | awk '{if ($5>=1910) print "\n" "filename:" $9 "\n" "lenth:" $5 "B" "\n"}’	 //输出文件大小大于50B文件(以指定格式)
filename:2.txt
lenth:637
...
[root@localhost ~]# ll | awk '{if ($5>=1910 && /^-/) print "\n" "filename:" $9 "\n" "lenth:" $5 "B" "\n"}'

⑤[root@localhost Desktop]# cat awk.txt 
1 2 3 
4 5 6 
7 8 9 
awk -F ' ' '{for(i=1;i<=NF;i++) print $i}' awk.txt 		//顺序输出(一行一个数)
awk -F ' ' '{for(i=NF;i>=1;i--) print $i}' awk.txt		//每行逆序输出(一行一个数)

标签:13,sed,Desktop,SED,Linux,txt,root,localhost,三剑客
From: https://www.cnblogs.com/carmi/p/17779879.html

相关文章

  • Linux Kernel Code init/main.c
    1/*2*linux/init/main.c3*4*Copyright(C)1991,1992LinusTorvalds5*6*GK2/5/95-ChangedtosupportmountingrootfsviaNFS7*Addedinitrd&change_root:WernerAlmesberger&HansLermen,Feb......
  • Linux课程笔记
    Linux基础命令Linux的目录结构/,根目录是最顶级的目录了Linux只有一个顶级目录:/路径描述的层次关系同样适用/来表示/home/itheima/a.txt,表示根目录下的home文件夹内有itheima文件夹,内有a.txtls命令功能:列出文件夹信息语法:ls[-l-h-a][参数]参数:被查看的文件夹,不提......
  • 10-21|在linux我如果修改了时间,什么命令可以恢复正确啊
    如果你在Linux系统中手动更改了时间,并希望恢复到正确的网络时间,可以使用NTP(网络时间协议)来实现。以下是一些步骤:1.**确保你安装了NTP相关的工具**: 对于基于Debian的系统(例如Ubuntu): ```bash sudoapt-getupdate sudoapt-getinstallntpdate ``` 对于基......
  • MDT2013自动化部署Windows系统-启动映像添加
    添加启动映像:1:打开windows部署服务控制台,右键“启动映像”,选择“添加启动映像”:2:选择启动映像文件存放位置:MDT控制台更新的启动映像存放位置:Deploymentshare\Boot\目录下:3、输入映像名称和相应说明:4、确认选定映像摘要:5、完成启动映像添加:6、完成后视图如下:接下来为大家介绍的是WDS......
  • Linux Performance Analysis
    LinuxPerformanceAnalysis如何在30s内定位系统出现的问题,可以使用如下10个命令:uptimedmesg|tailvmstat1mpstat-PALL1pidstat1iostat-xz1free-msar-nDEV1sar-nTCP,ETCP1topuptimeuptime能获取系统平均负载(Loadaverage)。负载是当前CPU的......
  • linux进程的管理与调度 --- wake_up_process
    如下为唤醒进程的API,执行内容如下:给待唤醒进程选择一个合适的CPU将待唤醒进程放入选定CPU的运行队列,每个CPU都有一个运行队列判断当前进程是否应该被待唤醒进程抢占,如果应该,置位当前进程的 TIF_NEED_RESCHED标志intwake_up_process(structtask_struct*p)//入参为待......
  • linux基础
    入门信息/在Linux系统中表示1出现在开头的/表示:根目录2出现在中间表示层级目录快捷键ctrl+c强制停止Linux某些程序的运行,如果想要强制停止它,可以使用快捷键ctrl+C命令输入错误,也可以通过快捷键ctrl+c,退出当前输入,重新输入历史命令搜索可以通过history命令,查看历史输入过......
  • Linux文件的目录结构解析
    学习Linux,不仅限于学习各种命令,了解整个Linux文件系统的目录结构以及各个目录的功能同样至关重要。使用Linux时,通过命令行输入ls-l/可以看到,在Linux根目录(/)下包含很多的子目录(称为一级目录),例如bin、boot、dev等。同时,各一级目录下还含有很多子目录(称为二级目录),比如/b......
  • 第八周 Linux课后技术总结
    4.2基本权限ACL4.2.1ACL基本用法1查看ACL权限:getfacl2为用户设置ACL权限:setfacl-mu:3为组设置ACL权限:setfacl-mg:4删除ACL权限:setfacl-x5删除所有ACL权限,回到UGO的基本权限:setfacl-b4.2.2ACL高级特性1mask权限:临时修改文件的ACL权限,在任意ACL权限修改......
  • 救济金发放(The Dole Queue, UVa 133)
    #include<stdio.h>#include<string.h>#definemaxn100intn,k,m,a[25];intleft,chance;intwin,lose;chars[maxn],s2[maxn];  intgo(intp,intd,intt){ while(t--){  do{    p=(p+d+n-1)%n+1;//将顺时针与逆时针合并,顺时针向前......