linux小工具(grep+cut+sort+uniq+tee+diff+patch+paste+tr)(代码片段)

何翰宇 何翰宇     2022-12-07     505

关键词:

文章目录


1. grep

grep是一个行过滤工具,可以根据指定的关键词进行过滤
语法:grep [选项] ‘关键字’ [文件名]

常用选项:

	-i: 不区分大小写
    -v: 查找不包含指定内容的行,反向选择
    -w: 按单词搜索
    -o: 打印匹配关键字
    -c: 统计匹配到的行数
    -n: 显示行号
    -r: 逐层遍历目录查找
    -A: 显示匹配行及后面多少行	
    -B: 显示匹配行及前面多少行
    -C: 显示匹配行前后多少行
    -l:只列出匹配的文件名
    -L:列出不匹配的文件名
    -e: 使用正则匹配
    -E:使用扩展正则匹配
    ^key:以关键字开头
    key$:以关键字结尾
    ^$:匹配空行

2. cut

cut是截取工具,用于列的截取
语法:cut [选项] [文件名]

常见选项

-c:	以字符为单位进行分割,截取
-d:	自定义分隔符,默认为制表符\\t
-f:	与-d一起使用,指定截取哪个区域(哪一列)

示例

[root@lamp tmp]# cut -d : -f1 test.txt # 以冒号分割,截取第1列内容

[root@lamp tmp]# cut -d : -f2 test.txt # 以冒号分割,截取第2列内容

[root@lamp tmp]# cut -d : -f1,2,4 test.txt # 以冒号分割,截取底2列和第3列的内容

[root@lamp tmp]# cut -c5 test.txt # 截取每行第5个字符

[root@lamp tmp]# cut -c1-5 test.txt # 截取1到5个字符

[root@lamp tmp]# cut -c2-6 test.txt # 截取2到6个字符

[root@lamp tmp]# cut -c6- test.txt # 截取从第6个字符往后的所有字符
x:0:0:ROOT:/root:/bin/bash
:1:1:bin:/bin:/sbin/nologin
n:x:2:2:daemon:/sbin:/sbin/nologin
:3:4:adm:/var/adm:/sbin/nologin
4:7:lp:/var/spool/lpd:/sbin/nologin

3. sort

sort工具用于排序;它将文件的每一行作为一个单位,从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

语法:sort [选项] [文件名]

常用选项

-u :去除重复行
-r :降序排列,默认是升序
-o : 将排序结果输出到文件中,类似重定向符号>
-n :以数字排序,默认是按字符排序
-t :分隔符
-k :第N列
-b :忽略前导空格。
-R :随机排序,每次运行的结果均不同

按照用户uid升序排序

[root@lamp tmp]# cat test.txt 
root:x:0:0:ROOT:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@lamp tmp]# sort -n -t: -k3 test.txt
root:x:0:0:ROOT:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

排序并去重

[root@lamp tmp]# cat file1
444
ddd
aaa
aaa
333
bbb
bbb
111

[root@lamp tmp]# sort -nu file1
ddd
111
333
444

4. uniq

uniq用于去除重复的行

语法:uniq [选项] [文件名]

常用选项

-i: 忽略大小写
-c: 统计重复行次数
-d:只显示重复行
[root@lamp tmp]# cat file1 # 统计重复行次数
444
ddd
aaa
aaa
333
bbb
bbb
111

[root@lamp tmp]# uniq -c file1 # 只显示重复行
      1 444
      1 ddd
      2 aaa
      1 333
      2 bbb
      1 111
      1 
[root@lamp tmp]# uniq -cd file1
      2 aaa
      2 bbb

5. tee

tee工具是从标准输入读取并写入到标准输出和文件
即:双向覆盖重定向(屏幕输出|文本输入)

常用选项

-a: 双向追加重定向

[root@lamp tmp]# echo hello | tee file1
hello
[root@lamp tmp]# cat file1
hello
[root@lamp tmp]# echo 999|tee -a file1
999
[root@lamp tmp]# cat file1
hello
999

6. diff

diff工具用于逐行比较文件的不同
注意:diff描述两个文件不同的方式是告诉我们怎样改变第一个文件之后与第二个文件匹配

语法:diff [选项] [文件1] [文件2]

常用选项

-b:不检查空格
-B:不检查空白行
-i:不检查大小写
-w:忽略所有的空格
--normal:正常格式显示(默认)
-c:上下文格式显示
-u:合并格式显示

比较两个普通文件异同,文件准备

[root@lamp tmp]# cat file1
aaaa
111
hello world
222
333
bbb
[root@lamp tmp]# cat file2
aa
hello
111
222
bbb
333
world
[root@lamp tmp]# 

1)正常显示

[root@lamp tmp]# clear
[root@lamp tmp]# diff file1 file2
1c1,2 # 第一个文件的第1行需要改变(c=change)才能和第二个文件的第1到2行匹配	
< aaaa # 小于号"<"表示左边文件(file1)文件内容
--- # ---表示分隔符
> aa  # 大于号">"表示右边文件(file2)文件内容
> hello
3d3 # 第一个文件的第3行删除(d=delete)后才能和第二个文件的第3行匹配
< hello world
5d4 # 第一个文件的第5行删除后才能和第二个文件的第4行匹配
< 333
6a6,7 # 第一个文件的第6行增加(a=add)内容后才能和第二个文件的第6到7行匹配
> 333 # 需要增加的内容在第二个文件里是333和world
> world

2)上下文格式显示

[root@lamp tmp]# diff -c file1 file2
 # 前两行主要列出需要比较的文件名和文件的时间戳;文件名前面的符号***表示file1,---表示
*** file1	2022-07-26 21:48:45.771150441 +0800
--- file2	2022-07-26 21:48:56.349150967 +0800
***************
*** 1,6 **** # 以***开头表示file1文件,1,6表示1到6行
! aaaa # !表示该行需要修改才与第二个文件匹配
  111
- hello world # -表示需要删除该行才与第二个文件匹配
  222
- 333 # -表示需要删除该行才与第二个文件匹配
  bbb
--- 1,7 ---- # 以---开头表示file2文件,1,7表示1到7行
! aa # 表示第一个文件需要修改才与第二个文件匹配
! hello # 表示第一个文件需要修改才与第二个文件匹配
  111
  222
  bbb
+ 333 # 表示第一个文件需要加上该行才与第二个文件匹配
+ world


3)合并格式显示

[root@lamp tmp]# diff -u file1 file2
前两行主要列出需要比较的文件名和文件的时间戳;文件名前面的符号---表示file1,+++表示file2
--- file1	2022-07-26 21:48:45.771150441 +0800
+++ file2	2022-07-26 21:48:56.349150967 +0800
@@ -1,6 +1,7 @@
-aaaa
+aa
+hello
 111
-hello world
 222
-333
 bbb
+333
+world

4)比较两个目录不同

# 默认情况下也会比较两个目录里相同文件的内容
[root@lamp tmp]# cat dir1/file1
aaaa
111
hello world
222
333
bbb
[root@lamp tmp]# cat dir2/file1
test

[root@lamp tmp]# diff dir1 dir2
diff dir1/file1 dir2/file1
1,6c1
< aaaa
< 111
< hello world
< 222
< 333
< bbb
---
> test
# 如果只需要比较两个目录里文件的不同,不需要进一步比较文件内容,需要加-q选项
[root@lamp tmp]# diff -q dir1 dir2
Files dir1/file1 and dir2/file1 differ

5)小技巧(patch)

有时候我们需要以一个文件为标准,去修改其他文件,并且修改的地方较多时,我们可以通过打补丁的方式完成。

[root@lamp tmp]# cat file1
aaaa
111
hello world
222
333
bbb
[root@lamp tmp]# cat file2
aa
hello
111
222
bbb
333
world
# 先找出文件不同,然后输出到一个文件
[root@lamp tmp]# diff -uN file1 file2 > file.patch
-u:上下文模式
-N:将不存在的文件当作空文件
2)将不同内容打补丁到文件
[root@lamp tmp]# patch file1 file.patch
patching file file1
# 测试验证
[root@lamp tmp]# diff file1 file2
[root@lamp tmp]# cat file1
aa
hello
111
222
bbb
333
world
[root@lamp tmp]# cat file2
aa
hello
111
222
bbb
333
world

7. paste

paste工具用于合并文件行

常用选项

-d:自定义间隔符,默认是tab
-s:串行处理,非并行
[root@lamp tmp]# cat test1
aaa
bbb 111
222
[root@lamp tmp]# cat test2
hello world
[root@lamp tmp]# paste test1 test2
aaa	hello world
bbb 111	
222	
[root@lamp tmp]# paste -d : test1 test2
aaa:hello world
bbb 111:
222:
[root@lamp tmp]# paste -d : -s test1 test2
aaa:bbb 111:222
hello world

8. tr工具

tr用于字符转换,替换和删除;主要用于删除文件中控制字符或进行字符转换

用法

用法1:命令的执行结果交给tr处理,其中string1用于查询,string2用于转换处理
# [命令]|tr  'string1'  'string2'
用法2:tr处理的内容来自文件,记住要使用"<"标准输入
# tr  'string1'  'string2' < [文件]

用法3:匹配string1进行相应操作,如删除操作
# tr [选项]'string1' < filename

常用选项

-d 删除字符串1中所有输入字符。
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串
[root@lamp tmp]# cat tmp.txt # 测试使用
root:x:0:0:ROOT:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/ROOT:/sbin/nologin
112345
aabvd


123445 aabccde
hello	world

====================================分割线=======================================

# tr -d '[:/]' < tmp.txt 删除文件中的 :和 /
# cat tmp.txt | tr -d '[:/]' 删除文件中的 :和 /
# tr '[0-9]' '@' < tmp.txt 将文件中的数字替换成@符号
# tr '[a-z]' '[A-Z]' < tmp.txt 将文件中的小写字符替换成大写字母
# tr -s '[a-z]' < tmp.txt 匹配小写字母,把连续相同的小写字母压缩成一个
# tr -s '[a-z0-9]' < tmp.txt 匹配小写字母和数字并将连续重复的替换成一个
# tr -d '[:digit:]' < tmp.txt 删除文件中的数字
# tr -d '[:blank:]' < tmp.txt 删除水平空白(空格、\\t)
# tr -d '[:space:]' < tmp.txt 删除所有水平和垂直空白(换行、空格、\\t)



linux文本处理工具简单使用(代码片段)

...bin/nologin的用户个数,并将用户都显示出来grep是一个文本工具,是通过一行一行来匹配文本进行处理的;通过grep命令,借助-v参数显示不匹配的行;getentpasswd|grep-Ev/sbin/nologin$2查出用户UID最大值的用户名、UID及shell类型Sort用于排... 查看详情

liunx中sed、grep、cut、sort、tee、diff、paste命令

...学习的liunx命令做一个总结,方便复习使用。grep是行过滤工具,用于根据关键字进行行过滤1、语法:2、常见选项:3、常见的案例使用cut是列截取工具,用于列的截取1、语法2、常见选项3、常见的案例使用关于sed命令的使用,大... 查看详情

关于cutsortgrep等几个命令在实际问题的小应用

...gin的用户个数,并将用户都显示出来该问题主要使用cat、grep、cut、wc命令与管道。cat/etc/passwd|grep-v‘/sbin/nologin‘|cut-d":"-f1cat/etc/passwd|grep-v‘/sbin/nologin‘|cut-d":"-f1|wc-l2、查出用户UID最大值的用户名、UID及shell类型该... 查看详情

grep与正则表达式

...正则表达式三、egrep扩展正则表达式四、其他文本及查看工具{wc,cut,sort,uniq,diff,patch}五、练习用例一、grep简介    文本处理工具: Linux上文本处理三剑客: grep:文本过滤工具(模式:pattern) grep:基本正则表达式,... 查看详情

linux20题-生信技能树

...令rm(-r)filenameorfile.txt#删除(彻底)文件或文件夹,由于Linux系统没有垃圾桶,要慎用删除文件,可以rm-ifilename删除前询问知识点:mkdir-pfolder1..5/../..知识点:xargs的用法xargs命令知识点:for循环for...;do...;done知识点:rm-rffilename知识... 查看详情

shell编程之文本小工具(代码片段)

一、文本处理工具1、grep工具2、cut工具3、sort工具4、uniq工具5、tee工具6、diff工具7、paste工具二、bash的特性1、命令和文件自动补全2、常用的通配符3、bash中的引号一、文本处理工具1.grep工具grep是==行==过滤工具;用于根据关键字... 查看详情

正则grep管道符号“|”特殊符号“||”“&&”wc命令分隔符号cut排序sort去重复uniq符号``的使用(代码片段)

grep的参数与作用 内容补充:^:瞄定行的开始,如‘^#‘匹配所有以#开头的行。$:瞄定行的结束,如‘grep$‘匹配所有以grep结尾的行。.:匹配一个非换行符的字符,如‘gr.p‘后接一个任意字符,然后是p。*:匹配零个或多个先... 查看详情

linux中cut有误

Last|grep‘root’|cut–d‘’-f1这个命令本是只取得第一列,但是为什么全部显示?这个命令本是只取得第一列Last|grep'root'|cut–d''-f1注:‘’中间有一个空格‘’最好转一下,把多个空格改为一个last|grep'root'|tr-s... 查看详情

分析文本的工具练习

1、找出ifconfifig“网卡名”命令结果中本机的IPv4地址 [root@Centos8data]#ifconfig|grepinet|head-n1|tr-s‘‘|cut-d‘‘-f3  10.0.0.1002、查出分区空间使用率的最大百分比值 [root@Centos8data]#df|tr-s‘‘@|cut-d@-f5|grep-v"[[:alpha:]]"|sort-rn|head-n1... 查看详情

sed cut grep linux 命令输出

】sedcutgreplinux命令输出【英文标题】:sedcutgreplinuxcommandoutput【发布时间】:2021-03-2914:20:42【问题描述】:我有一个字符串,我想从匹配中删除所有匹配项,直到第一个逗号:示例["value":1,"btata":"15","Id&qu... 查看详情

shell工具cut/sed/awk/sort(代码片段)

1.cutcut的工作就是“剪”,具体的说就是在文件中负责 剪贴数据 用的。cut命令从文件的每一行剪贴字节、字符 和 字段,并将这些字节、字符和字段输出。(1)基本用法cut[选项参数]filename说明:默认分隔符... 查看详情

第四周文本处理工具(代码片段)

1、统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户个数,并将用户都显示出来grep-v"/sbin/nologin$"/etc/passwd|cut-d:-f12、查出用户UID最大值的用户名、UID及shell类型sort-t:-k3-nr/etc/passwd|head-1|cut-d:-f1,3,7|tr":"""3... 查看详情

性能工具之linux三剑客awkgrepsed详解(代码片段)

前言linux有很多工具可以做文本处理,例如:sort,cut,split,join,paste,comm,uniq,column,rev,tac,tr,nl,pr,head,tail.....,学习linux文本处理的懒惰方式(不是最好的方法)可能是:只学习grep,sed和awk。 使用这三个工具,你可以解决近99%linux... 查看详情

shell文本处理工具

...23/p/5540210.html  Linux下使用Shell处理文本时最常用的工具:find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk;提供的例子和参数都是最常用和最为实用的;我对shell脚本使用的原则是命令单行书写,尽量不要超过2行;如... 查看详情

从 Bash 脚本执行 GREP/CUT 命令时遇到问题

...w/etc/passwd|cut-d\':\'-f1,4,5grep1004-w/etc/passwd|cut-d\':\'-f1,4,5它在Linux的命令行中 查看详情

bash行,用于简单统计ssh中断尝试

...e,butmorethanyoucanseefromaquickless.#AmountpersourceIP:cat/var/log/sshd/*|grep'Invalid'|rev|cut-d''-f1|rev|sort|uniq-c|sort-n #Amountperday:cat/var/log/sshd/*|grep'Invalid'|tr-s''|cut-d''-f1-2|sort|uniq-c #Theusernamestheytry:cat/var/log/sshd/*|grep'Invalid'|rev|cut-d''-f3|rev|sort|uniq-c... 查看详情

不就是切割命令吗?大神才懂的linux系统切割工具-cut

cut工具:对文本按列进行切分,可以指定定界符,linux下制表符是默认的定界符。常用选项:-d:设置分隔符显示文件里,以冒号分隔的第1和3列显示文件里,以冒号分隔的第1和3列-c:按字符分割显... 查看详情

linux生产文本处理掌握这些就够了:awk,gawk,sed,grep,sort

...在shell脚本中处理任何类型的数据,掌握grep,sed和gawk工具可以达到事半功倍的效果。企业开发中常用,高阶命令。linux文本处理三剑客:grep+sed+awk(gawk)16.0grep的使用所有的类linux系统都会提供一个名为gre... 查看详情