linux三剑客(awk,grep,sed)

简介

linux三剑客是指在linux操作系统中非常重要的三个命令,即awk,grep,sed这三个命令。它们都具有优秀的处理文件的功能。

①awk:多用于取列。

②grep:多用于查找或匹配文本。

③sed:多用于替换和取行。

正则表达式

在使用linux三剑客前,我们还需要了解一下正则表达式,因为linux三剑客可以根据正则表达式来查找和匹配文本。正则表达式由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,以下仅列出一部分常用的元字符。

元字符描述
\转义符,将特殊字符进行转义,忽略其特殊意义
^匹配行首,^则是匹配字符串的开始
$匹配行尾,$则是匹配字符串的结尾
*匹配前面的子表达式任意次(可以为0次)
+匹配前面的子表达式一次或多次(大于等于1次)
?匹配前面的子表达式0次或1次
{ }重复,有多中表达形式。如{n}:重复n次,{n,}:重复n次或更多次,{n,m}:重复n到m次
.匹配除换行符\n之外的任意单个字符
[ ]匹配包含在[字符]之中的任意一个字符
[^]匹配[ ^字符]之外的任意一个字符
[-]匹配[ ]中指定范围内的任意一个字符,要写成递增,如[0-9]

grep命令

grep能全面搜索正则表达式并把行打印出来,是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。因此grep更适合单纯的查找或匹配文本。其用法如下:

grep [选项]... Pattern [file]...

grep选项有很多,以下仅列出一部分,想要了解更多选项可以通过grep --help命令进行查询了解。

grep --help
选项(模式选择)描述
-E模式是扩展正则表达式
-F模式是字符串
-G模式是基本正则表达式
-P模式是Perl正则表达式
-e用指定的模式字符串来进行匹配操作
-f从给定文件中取得模式
-i在模式和数据中忽略大小写
-n显示匹配的行数
-w强制模式仅完全匹配字词
-x强制模式仅完全匹配整行
-z数据行以一个 0 字节结束,而非换行符
lgs@lgs-virtual-machine:~/Desktop/study/test/new_test$ vim test.txt 
Correct:
13322110001
15866666668
Wrong:
11112345678
123
####查找以w开头的所有行(忽略大小写),并显示行号
lgs@lgs-virtual-machine:~/Desktop/study/test/new_test$ grep '^w' test.txt -i -n
4:Wrong:
####查找正确的手机号
lgs@lgs-virtual-machine:~/Desktop/study/test/new_test$ grep -E '^1[3-9][0-9]{9}' test.txt 
13322110001
15866666668

awk命令

awk 是一种处理文本文件的语言,是一个强大的文本分析工具。相较于另两个命令,awk 更适合格式化文本,对文本进行较复杂格式处理。awk语法如下:

awk [选项] [Program] [file]

awk选项:

选项描述
-f从脚本文件中读取awk命令
-F指定分隔字段符
-v赋值一个用户定义变量
lgs@lgs-virtual-machine:~/Desktop/study/test/new_test$ vim salary.txt
ID |   name   | working_days | leaving_days | salary_perday | wages_intotal
1  | zhangsan |      29      |     2        |      100      |      2900
2  | lisi     |      31      |     0        |      100      |      3100
3  | wangwu   |      25      |     6        |      200      |      5000
4  | zhaoliu  |      28      |     3        |      150      |      4200
5  | guaner   |      30      |     1        |      100      |      3000
####使用-F指定|为分隔符
lgs@lgs-virtual-machine:~/Desktop/study/test/new_test$ awk -F "|" '{print $2,$3,$4,$5,$6}' salary.txt 
   name     working_days   leaving_days   salary_perday   wages_intotal
 zhangsan        29            2               100             2900
 lisi            31            0               100             3100
 wangwu          25            6               200             5000
 zhaoliu         28            3               150             4200
 guaner          30            1               100             3000

awk变量:

变量名描述
$nn>0时,当前的第n个列所在的字段;n=0时,完整的一行记录
FS(Field Separator)输入字段分隔符, 默认为空白字符
OFS(Out of Field Separator)输出字段分隔符, 默认为空白字符
RS(Record Separator)输入记录分隔符(输入换行符), 指定输入时的换行符
ORS(Output Record Separate)输出记录分隔符(输出换行符),输出时用指定符号代替换行符
NF(Number for Field)当前行的字段的个数(即当前行被分割成了几列)
NR(Number of Record)行号,当前处理的文本行的行号
FNR各文件分别计数的行号
ARGC命令行参数的个数
ARGV数组,保存的是命令行所给定的各参数
####输出zhangsan所在行
lgs@lgs-virtual-machine:~/Desktop/study/test/new_test$ awk '/zhangsan/{print $0}' salary.txt 
1  | zhangsan |      29      |     2        |      100      |      2900
####输出第二行和第三行
lgs@lgs-virtual-machine:~/Desktop/study/test/new_test$ awk 'NR>1&&NR<=3{print $0}' salary.txt 
1  | zhangsan |      29      |     2        |      100      |      2900
2  | lisi     |      31      |     0        |      100      |      3100
####指定输入字段分隔符为'|',输出字段分隔符为'~',并输出第二列和最后两列
lgs@lgs-virtual-machine:~/Desktop/study/test/new_test$ awk -v FS='|' -v OFS='~' '{print $2,$(NF-1),$(NF)}' salary.txt 
   name   ~ salary_perday ~ wages_intotal
 zhangsan ~      100      ~      2900
 lisi     ~      100      ~      3100
 wangwu   ~      200      ~      5000
 zhaoliu  ~      150      ~      4200
 guaner   ~      100      ~      3000

sed命令

sed是一种流编辑器,它一次仅处理一行。处理时,把当前处理的行存储在临时缓冲区中,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。因此sed更适合编辑匹配到的文本。sed命令语法如下:

sed [选项] [script] [file]

sed选项

选项描述
-e以选项中指定的script来处理输入的文本文件
-f以选项中指定的script文件来处理输入的文本文件
-i直接修改文件(如果指定扩展名则备份文件)
-n取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行

sed处理动作

动作描述
a向匹配行后面插入内容,会在匹配行的下一行输出
c更改匹配行的内容
d删除匹配的内容
i向匹配行前插入内容,会在匹配行的上一行输出
p打印出匹配的内容,通常与-n选项和用
s替换掉匹配的内容,通常可以搭配正则表达式
lgs@lgs-virtual-machine:~/Desktop/study/test/new_test$ vim test_sed
This Is a Test For SED!
What is sed?
sed is a great GUN.
####a和i动作的区别
lgs@lgs-virtual-machine:~/Desktop/study/test/new_test$ sed -e '1a\it is a new line!' test_sed 
This Is a Test For SED!
it is a new line!
What is sed?
sed is a great GUN.
lgs@lgs-virtual-machine:~/Desktop/study/test/new_test$ sed -e '1i\it is a new line!' test_sed 
it is a new line!
This Is a Test For SED!
What is sed?
sed is a great GUN.
####修改第一行
lgs@lgs-virtual-machine:~/Desktop/study/test/new_test$ sed '1c\changed!!!' test_sed 
changed!!!
What is sed?
sed is a great GUN.
####删除第二行
lgs@lgs-virtual-machine:~/Desktop/study/test/new_test$ sed '2d' test_sed 
This Is a Test For SED!
sed is a great GUN.
####将sed替换为command_sed
lgs@lgs-virtual-machine:~/Desktop/study/test/new_test$ sed 's\sed\command_sed\' test_sed 
This Is a Test For SED!
What is command_sed?
command_sed is a great GUN.
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Linux三剑客指的是 awksedgrepawk 是一种用来处理文本文件的工具,它可以根据指定的模式进行自动分割并进行数据处理。 sed 是一种流编辑器,它可以对文本文件进行替换、删除和插入操作。 grep 是一种文本搜索工具,它可以在文本文件中搜索指定的字符串。 ### 回答2: Linux三剑客,分别是awksedgrep,它们是Linux系统中非常重要的命令行工具,它们通常被称为文本处理工具。这些工具通常被用于筛选、搜索和处理文本文件。 grep是一种常见的文本搜索工具,可以在文件和文件夹中搜索指定的字符串或正则表达式grep可以搜索多个文件并返回匹配行的输出。它是处理日志文件或查找匹配模式的最佳工具之一。 sed是一种流编辑器,可以按照行处理文本文件。它可以通过替换、删除和插入操作来修改文件内容。在大型文件中查找并替换模式是sed的主要作用。该工具通常在文本文件中提取有用信息是常用。 awk是一种强大的文本操作工具,可以分析大型文本文件并对其进行处理。该工具可以遍历行和列,并提供强大的文本处理工具,如计算、过滤和转换数据。awk的处理速度非常快,适用于处理大型数据文件。 Linux三剑客awk是最强大的工具,它可以执行复杂的文本数据操作和转换,可大大简化开发和管理过程。sed主要用于简单的文本数据过滤和替换,而grep主要用于搜索文件和定位特定行。 总之,Linux三剑客在文本数据处理方面具有不可替代的重要作用。对于Linux操作系统的开发人员和管理员来说,熟练使用这些工具可以提高他们的工作效率,使他们更容易管理和操作文本文件。 ### 回答3: Linux三剑客awk sed grep是我们在日常工作中经常使用的三个命令。它们都属于文本处理工具,可以用于查找、处理、分析文本文件等。 首先,grep是最常用的文本搜索工具。grep可以用来快速查找文件中指定的字符串或正则表达式,并将包含该字符串或正则表达式的行打印出来。常用的命令grep、egrep和fgrep。比如,我们可以使用grep命令来查找一个文件中包含指定关键字的行,可以使用egrep来支持正则表达式搜索,使用fgrep来进行快速搜索,不支持正则表达式。 其次,sed是一种流编辑器,主要用于对文本文件进行替换、删除、添加、插入等操作。sed命令可以通过管道(|)将多个命令组合起来,从而进行复杂的文本操作。sed可以快速完成对文本文件的修改操作,比如替换文件中的某些内容、删除特定的行、在文件中插入新的文本等。sed命令形式是“command", 比如"s/old/new/g",表示将old替换成new。 最后,awk是一种强大的文本处理工具,主要用于在文本文件中查找、处理以及格式化特定的字段。和grepsed不同的是,awk更加灵活,可以在处理过程中做到数据过滤和加工,对于大数据的处理特别有用。awk命令的常用语法是"pattern {action}"。其中,pattern代表要匹配的模式,而action代表模式匹配时需要执行的动作,我们可以在其中添加处理语句来对文件进行各种处理操作,比如计算、统计、格式化等。 综上所述,Linux三剑客awk sed grep是我们在文本处理工作中不可或缺的三个工具,不同的工具可以用于处理不同的文本操作,也可以用于搭配使用,以完成更加复杂的文本处理工作。对于需要经常处理文本的人员来说,掌握这些工具是非常必要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值