Linux系统中最重要的三个命令

描述

Linux三剑客是Linux系统中最重要的三个命令,它们以其强大的功能和广泛的应用场景而闻名。这三个工具的组合使用几乎可以完美应对Shell中的数据分析场景,因此被统称为Linux三剑客。

1、grep

grep是一个强大的文本搜索工具,用于在文件内容中查找指定的字符串,并将匹配到的行输出到标准输出。grep命令支持多种选项和模式匹配,使得在文件中搜索特定内容变得非常灵活和高效。
文本搜索命令;

命令格式为:

 

grep "搜索的字符串" 文件名

 

1)基础

参数:
-c:统计出现的次数
-i:不区分大小写
-n:输出行号

2)实例

统计出现的次数
grep -c "xx" text.log

2、sed

sed是一个流编辑器,主要用于对输入流(或文件)进行基本的文本转换。它可以用来查找、新增、删除和修改替换文本中的数据。sed命令的强大之处在于它可以对文本进行非交互式的编辑,从而提高了处理大量文本的效率。

1)基本概念

sed是一种流编辑器,它是文本处理工具,支持正则表达式,通过一行一行的遍历,执行相应的命令,来处理、编辑文本文件。
(1)语法
sed [选项] ‘command’ 文件名称

选项部分,常见选项包括-n,-e,-i,-f,-r选项。
command部分包括:[地址1,地址2] [函数] [参数(标记)]

(2)命令格式为:

 

sed [-nefri] '命令' 文本
cat 文本 | sed [-nefr] '命令'
echo '.....' |sed [-nefr] '命令'

 

2)选项(nefri)

(1)选项-n

sed默认会把模式空间处理完毕后的内容输出到标准输出,也就是输出到屏幕上,加上-n选项后被设定为安静模式,也就是不会输出默认打印信息,除非子命令中特别指定打印选项,则只会把匹配修改的行进行打印。
(2)选项-e

如果需要用sed对文本内容进行多种操作,则需要执行多条子命令来进行操作。

(3)选项-i

sed默认会把输入行读取到模式空间,简单理解就是一个内存缓冲区,sed子命令处理的内容是模式空间中的内容,而非直接处理文件内容。因此在sed修改模式空间内容之后,并非直接写入修改输入文件,而是打印输出到标准输出。如果需要修改输入文件,那么就可以指定-i选项。

(4)选项-f

还记得 -e 选项可以来执行多个子命令操作,用分号分隔多个命令操作也是可以的,如果命令操作比较多的时候就会比较麻烦,这时候把多个子命令操作写入脚本文件,然后使用 -f 选项来指定该脚本。

(5)选项-r
sed命令的匹配模式支持正则表达式的,默认只能支持基本正则表达式,如果需要支持扩展正则表达式,那么需要添加-r选项。

3)命令(acdipynNs)

a新增,c取代,d删除,i插入,p打印,y将字符转成另一个字符等

 

[root@localhost sed]# cat message
1a
2b
3c
4d
5e
6f
abcdABCD

 

(1)a

子命令a表示在指定行下边插入指定行的内容。

 

#将message文件中每一行下边都插入添加一行内容是A
sed 'a A' message
#将message文件中1-2行的下边插入添加一行内容是A
sed '1,2a A' message
#将message文件中1-2行的下边分别添加3行,3行内容分别是A、B、C,这里使用了
,插入多行内容都可以按照这种方式来实现。
sed '1,2a A
B
C' message

 

(2)i

子命令i和a使用上基本上一样,只不过是在指定行上边插入指定行的内容。

 

#将message文件中每一行上边都插入添加一行内容是A
sed 'i A' message
#将message文件中1-2行的上边插入添加一行内容是A
sed '1,2i A' message
#将message文件中1-2行的上边分别添加3行,3行内容分别是A、B、C,这里使用了
,插入多行内容都可以按照这种方式来实现
sed '1,2i A
B
C' message

 

(3)c

子命令c是表示把指定的行内容替换为自己需要的行内容。

 

#将message文件中所有的行内容都分别替换为A行内容
sed 'c A' message
#将message文件中1-2行的内容替换为A,注意这里说的是将1-2行所有的内容只替换为一个A内容,也就是1-2行内容变成了一行,定址如果连续就是这种情况
sed '1,2c A' message
#将message中1-2行内容分别替换为了A,需要在替换内容上手动加换行
,这样当然也可以将一行内容替换为多行内容
sed '1,2c A
A' message

 

(4)d

子命令d表示删除指定的行内容,比较简单,更容易理解。

 

#将message所有行全部删除,因为没有加定址表达式,所以平时如果需要删除指定行内容,需要在子命令前加定址表达式
sed 'd' message
#将message文件中1-3行内容删除
sed '1,2d' message

 

(5)y

子命令y表示字符替换,可以替换多个字符,只能替换字符不能替换字符串,且不支持正则表达式,

 

#把message中所有a字符替换为A符号,所有b字符替换为B符号
sed 'y/aB/Ab/' message

 

(6)=

子命令=,可以将行号打印出来。

 

#将指定行的上边显示行号
sed '1,2=' message

 

(7)r

子命令r,类似于a,也是将内容追加到指定行的后边,只不过r是将指定文件内容读取并追加到指定行下边。

 

#将r.txt文件内容读取并插入到message文件第1行的下边
sed '1r r.txt' message

 

(8)s

子命令s为替换子命令,是平时sed使用的最多的子命令,没有之一。因为支持正则表达式,功能变得强大无比,下边来详细地说说子命令s的使用方法。
基本语法:
[address]s/pattern/replacement/flags

flags

flags 说明
n 可以是1-512,表示第n次出现的情况进行替换
g 全局更改
p 打印模式空间的内容
w file 写入到一个文件file中

 

#b全局换成x
sed 's/b/x/g' message

 

4)实例

(1)test.txt的第一行前插入“a new line”

 

sed -i '1ia new line' text.txt

 

(2)在第三行新增一行

 

sed -i '3a a new line' text

 

3、awk

awk是一个文本处理工具,用于对文本或数据进行模式扫描和处理。它可以根据定位到的数据行处理其中的分段,并进行数据切片或执行其他操作。awk命令非常适合进行数据提取和报告生成等任务,是Linux系统中进行文本和数据处理的利器。

1)基本概念

awk是结构化数据处理程序;
awk是一门数处理领域的语言;
awk拥有c语言式的语法结构,例如print是语句,但不是函数;
(1)语法
awk [选项] '匹配规则和处理规则 ' [处理文本路径]

匹配规则主要是:正则表达式、字符串

处理规则主要是:设置变量、设置数组、定义函数(用的比较少)、数组循环、加减乘除运算、字符串拼接

(2)命令格式为:

 

awk [选项] 'BEGIN{定义1;定义2;}/模式/{操作1;操作2}END{操作1;操作2}' file1 file2

 

选项:如-F:指定分隔符为:
BEGIN{} : BEGIN是在awk处理文本之前运行
/模式/ : 使用的匹配规则,模式为正则或者字符串
{} :循环(每次只处理一行数据),如{print $1}打印第一列
END{} :当所有的处理全部执行完毕之后,执行END中的相关操作

2)操作符:~、==、!=、>等

如:

 

#当前行匹配以a开头成功时则执行后面的打印 
awk '/^a/ {print $1}'

 

上面正则匹配的范围是整行的内容,如果只想匹配指定字段的内容,则可以这样使用:

 

awk '$n~/^1/ {print $1}'

 

通过~符号规定了正则的匹配操作范围【这里是字段n】,~叫做匹配操作符

3)BEGIN和AND:

BEGIN里面可以打印一些字符串,或者定义变量(变量名="值" ,值不是数字的话,必须要用双引号括起来,引用变量的时候,变量前面是不要加$的)。
END里面可以打印一些字符串,或者进行最终的计算。如果在BEGIN里面没有定义变量的话,最终也可以引用这个变量的,只是变量值为空,在awk里面变量是可以不预先定义;

4)选项

参数 解释
-F 指定分割字段符
-v 定义或修改一个awk内部的变量
-f 从脚本文件中读取awk命令

5)常见变量:

内置变量 解释
FS 默认输入列分隔符(空格和tab)
OFS 默认输出列分隔符(空格)
NF 每行有几段(列)(print $NF代表打印最后一列)
RS 默认输入行分隔符( )
ORS 默认输出行分隔符( )
FILENAME 当前所操作文件名称
NR 读取每行时当前的行号(对于合并文件来说,不同文件行号连续显示)
FNR 读取每行时显示当前的行号(对于合并文件来说,不同文件行号不连续显示)

$0:表示当前整行,$1表示第一个字段,$2表示第二个字段,$n 表示第n个字段;

6)判断:

7)实例

(1)默认分隔符是空格和tab,打印第二列

 

ps |awk '{print $2}'

 

(2)分隔符是冒号,打印第一、二列,并用空格分隔

 

awk -F ":" '{print $1,$2}' /etc/passwd

 

(3)分隔符是冒号,打印第一、二列,并用指定符号分隔

 

awk -F ":" '{print $1"--"$2}' /etc/passwd

 

(4)分隔符是冒号和逗号,打印第一、二列,并用指定符号分隔

 

awk -F "[:,]" '{print $1"--"$2}' /etc/passwd

 

(5)默认分隔符,打印以d开头的行的第一列

 

docker ps |awk '/^d/ {print $1}'

 

(6)默认分隔符,打印第n列以d开头的行的第一列

 

docker ps |awk '$n~/^d/ {print $1}'

 

(7)在打印前指定分隔符变量FS为冒号和逗号

 

awk 'BEGIN{FS="[:,]"}{print $1}' /etc/passwd

 

(8)在打印前指定分隔符变量FS为冒号和逗号,定义变量line

 

awk 'BEGIN{FS="[:,]";line=1}{print $line}' /etc/passwd

 

(9)定义变量sum计算和,每次输出计算结果,最终输出

 

awk 'BEGIN{FS="[,:]";sum=0}{sum+=$3;print sum}END{print "sum=",sum}' /etc/passwd

 

(10)打印当前文件名称

 

awk '{pring FILENAME}' /etc/passwd

 

链接:https://www.cnblogs.com/hoaprox/p/18269422

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分