• 欢迎访问显哥博客,本网站纯属学习技术,绝无商业用途,欢迎小伙伴们共同学习!研究技术!QQ:52249909 加我QQ
  • 世界75亿人,这么小的概率,能认识你,是我一生的幸运,不妨加个QQ接触一下:52249909 加我QQ

字符处理命令及三剑客之sed命令【显哥出品,必为精品】

运维基础 lixian 2年前 (2019-12-04) 358次浏览 0个评论 扫描二维码
文章目录[隐藏]

一、sort 命令

#排序,默认是以空白字符为分隔符,以字母或者数字的顺序进行排序
选项:
-t #指定分隔符
-k #指定以第几列进行排序,后面跟数字
-n #以数值大小进行排序
-r #倒叙排序

格式: sort 文件名
sort -t “:” -nrk3 passwd # k和3不能分开

[root@lixian ~]# sort -t ":" -k3 passwd           # 第三列 以第一个字符大小排列
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

如果想让数字大小排序就要加 -n : sort -t “:” -nk3 passwd
倒叙是-r: 注意:k和3不能分离

[root@lixian ~]# sort -t ":" -rk3 passwd 
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash

将重复的行排列在一起:默认是首字母大小排序

[root@lixian ~]# sort test.txt 
aaa/5654
abc/23
abc/34
abc/678
cbd/45
cbd/456
dwd/35

二、uniq 命令

#去重(必须是相邻的相同的行)
还可以进行统计行的次数
-c #统计重复行的次数
-u #只显示不重复
-d #只显示重复的
大部分需要搭配sort命令使用uniq
统计出现重复的行,然后再使用sort -rn 倒叙查看次数最多的一行

[root@lixian ~]# sort test.txt 
aaa/5654
abc/23
abc/23
abc/23
cbd/45
cbd/45
dwd/35
[root@lixian ~]# sort test.txt |uniq -c
      1 aaa/5654
      3 abc/23
      2 cbd/45
      1 dwd/35
[root@lixian ~]# sort test.txt |uniq -c | sort -nr
      3 abc/23
      2 cbd/45
      1 dwd/35
      1 aaa/5654

三、cut 命令

#取列,截取字段
选项:
-d #指定分隔符,默认是以tab键为分隔符
-f #取出指定的列,多个用逗号分隔或者- 连续多列
-c #截取指定的字符,多个用逗号分隔或者- 连续多列
以 “ / ” 为分隔符 取第一列

[root@lixian ~]# cut -d "/" -f1 test.txt 
abc
cbd
abc
aaa
abc
cbd
dwd
[root@lixian ~]# 

cut可以和cort、uniq搭配使用,查找某一列的重复的次数,然后次数最多的放在第一列。

[root@lixian ~]# cut -d "/" -f1 test.txt |sort 
aaa
abc
abc
abc
cbd
cbd
dwd
[root@lixian ~]# cut -d "/" -f1 test.txt |sort |uniq -c
      1 aaa
      3 abc
      2 cbd
      1 dwd
[root@lixian ~]# cut -d "/" -f1 test.txt |sort |uniq -c|sort -rn
      3 abc
      2 cbd
      1 dwd
      1 aaa

cut也可以取字符—–第几列和第几列用 逗号隔开,连续的用 – 分隔

[root@lixian ~]# cat test.txt 
abc/23
cbd/45
abc/23
aaa/5654
abc/23
cbd/45
dwd/35
[root@lixian ~]# cut -c 3,5 test.txt 
c2
d4
c2
a5
c2
d4
d3
[root@lixian ~]# cut -c 3-5 test.txt 
c/2
d/4
c/2
a/5
c/2
d/4
d/3

四、tr 命令

#替换、删除字符的命令,(只能单对单的替换,删除)
替换某一列字符 tr ” ” ” ” ,一般需要先取行
单独使用tr 必须用 < 输入文件

[root@lixian ~]# cat test.txt 
abc/23
cbd/45
abc/23
aaa/5654
abc/23
cbd/45
dwd/35
[root@lixian ~]# cat test.txt |tr "/" "0"
abc023
cbd045
abc023
aaa05654
abc023
cbd045
dwd035

tr -d 删除单个字符 但必须用 < 输入文件

[root@lixian ~]# tr -d "/" <test.txt 
abc23
cbd45
abc23
aaa5654
abc23
cbd45
dwd35

5、wc 命令

#统计 字节大小,行数,列数 字符的长度
选项:
-l #统计行数
-c #统计总字节大小
-w #统计总列数,默认以空白字符为分隔符
-L #统计最长的一行内容的长度
<输入重定向 指定输入设备

[root@lixian ~]# ls -l
total 4
-rw-r–r–. 1 root root 51 Dec  4 13:37 test.txt
[root@lixian ~]# wc -l <test.txt 
7
[root@lixian ~]# wc -w <test.txt 
7
[root@lixian ~]# wc -c <test.txt 
51
[root@lixian ~]# wc -L <test.txt 
8

扩展 变量:
指定一个变量名称 a 的值 = 99
$a 就是一个变量
echo $a 输出这个变量 就是输出这个变量定义的值 也就是99

六、sed 增删改查命令

#三剑客第二 擅长取行 、增删改查
选项:
-n #取消默认输出
-i #真正的替换
-r #支持扩展正则
+:至少一次
?:0次或者1次
{m,n}:至少m次,最多n次
():分组 \1\2\3…..
| :或者
内部命令:
p #打印
d #删除
s #替换
g #全局
a #追加
i #插入
; #多条命令的分隔
, #表示连续的命令

查:

p #打印
查行 多少行到多少行 用法 sed -n ‘行数p’ 文件名

[root@lixian ~]# sed -n '4,5p' test.txt 
aaa/5654
abc/23

查字符串 grep会的sed都会,grep不会的sed也会
也支持正则表达式
比如 /^abc/以什么开头 /3$/以什么什么结尾 | 是或者的意思(扩展正则)
多个字符串过滤行用;分号表示 过滤行到行的用,’/abc/,/edf/p’

[root@lixian ~]#sed  -n '/abc/p' test.txt 
abc/23
abc/23
abc/23

删:

删除行

[root@lixian ~]# sed '4,6d' test.txt
abc/23
cbd/45
abc/23
dwd/35

单个字符串所在的行删除

[root@lixian ~]# sed '/abc/d' test.txt 
cbd/45
aaa/5654
cbd/45
dwd/35

多个字符串删除

[root@lixian ~]# sed '/abc/d;/dwd/d' test.txt 
cbd/45
aaa/5654
cbd/45

增:

在文件里面插入一行内容
a #追加
i #插入
行数加上a是在行数的后面追加一行
行数加上 i是在行数的前面插入一行
$a是在最后一行后面追加 $i是在最后一行前面插入
在文件里面插入一行内容
a #追加
i #插入
行数加上a是在行数的后面追加一行
行数加上 i是在行数的前面插入一行
$a是在最后一行后面追加 $i是在最后一行前面插入

[root@lixian ~]# sed '2adwad/////' test.txt 
abc/23
cbd/45
dwad/////
[root@lixian ~]# sed '2idwad000000' test.txt 
abc/23
dwad000000
cbd/45

改:

替换内容
-i 生效
s #替换
g #全局
格式: sed ‘s#旧的#新的#gp’ 文件名
全局替换:

[root@lixian ~]# sed 's#abc#99999#g' test.txt 
99999/23
cbd/45
99999/23

局部替换:

[root@lixian ~]# sed 's#abc#999#' 123.txt 
999,abc,abc
999,abc,abc
cde,cde,,999,edc
cde,cde,,999,edc
aaa.999.aw.abc

针队行的替换:

[root@lixian ~]# sed '3s#abc#999#g' 123.txt 
abc,abc,abc
cde,cde,,abc,edc
aaa.999.aw.999

针对多行的替换:
[root@lixian ~]# sed ‘2,4s#abc#888#g’ 123.txt
abc,abc,abc
cde,cde,,888,edc
aaa.888.aw.888
也支持 $最后一行、^以什么什么开头、$以什么什么结尾

[root@lixian ~]# sed '/^a/s#abc#888#g' 123.txt 
888,888,888
cde,cde,,abc,edc
aaa.888.aw.888
[root@lixian ~]# 

本站博主 , 版权所有丨如未注明 , 均为原创
转载请注明原文链接:字符处理命令及三剑客之sed命令【显哥出品,必为精品】
喜欢 (32)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到