Linux–文本处理命令之wc、cut、sort
1、wc : word Count
命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出
1.1 命令格式:
wc [选项]文件…
1.2 命令参数:
-c 统计字节数。
-l 统计行数。
-m 统计字符数。这个标志不能与 -c 标志一起使用。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L 打印最长行的长度。
2、cut:以某种方式按照文件的行进行分割
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,
该字符将被写出;否则,该字符将被排除。
[zyk@localhost shell]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/root/apps/jdk1.8.0_191/bin:/home/zyk/.local/bin:/home/zyk/bin
#分割符为:,取第一个字符串
[zyk@localhost shell]$ echo $PATH | cut -d ":" -f 1
/usr/local/bin
#分隔符为:,取1到5这5个字符串
[zyk@localhost shell]$ echo $PATH | cut -d ":" -f 1-5
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/root/apps/jdk1.8.0_191/bin
#分隔符为:,取1到5和5这6个字符串
[zyk@localhost shell]$ echo $PATH | cut -d ":" -f 1-2,5
/usr/local/bin:/usr/bin:/root/apps/jdk1.8.0_191/bin
3.、sort:将文本文件内容加以排序
sort可针对文本文件的内容,以行为单位来排序
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,将小写字母视为大写字母。
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m 将几个排序好的文件进行合并。
-M 将前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-o<输出文件> 将排序后的结果存入指定的文件。
-k: 以哪个字段为关键字进行排序
-r 以相反的顺序来排序。
-t<分隔字符> 指定排序时所用的栏位分隔字符。
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位-。
下面示例 以 ‘ ’ 空格分隔,分成两列 以第二列的数值大小来排序
banana 12
apple 1
orange 8
#排序
[root@mr_huang_full ~]# sort -t' ' -k2 -n x.txt
#是以‘ ’空格分隔,分成两列 以第二列的数值大小来排序
apple 1
cdsf 2
ddfsd 5
orange 8
banana 12
4、sed :面向字符流的非交互式编辑器
用法: sed [选项][动作]选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被 列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。
function:
a :新增行, a 的后面可以是字串,而这些字串会在新的一行出现(目前的下一行)
c :取代行, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
d :删除行,因为是删除,所以 d 后面通常不接任何参数,直接删除地址表示的行;
i :插入行, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s :替换,可以直接进行替换的工作,通常这个 s 的动作可以搭配正规表示法,例如 1,20s/old/new/g 一般是替换符合条件的字符串而不是整行
一般function的前面会有一个地址的限制,例如 [地址]function,表示我们的动作要操作的行。下面我们通过具体的例子直观的看看sed的使用方法。
#删除行
[root@mr_huang_full ~]# cat s.txt
11 aa
22 bb
33 cc
23 dd
55 2e
[root@mr_huang_full ~]# sed '2,$d' s.txt #表示删除了从2行以后的行
11 aa
[root@mr_huang_full ~]# sed '1,3d' s.txt #删除了1到3行的数据
23 dd
55 2e
[root@mr_huang_full ~]# sed '/2/d' s.txt #删除包含2的行,/../表示一个正则表达式
11 aa
33 cc
[root@mr_huang_full ~]# sed '/^2/d' s.txt #删除以2开头的行,
11 aa
33 cc
55 2e
#增加行
[root@mr_huang_full ~]# sed '1a helloworld' s.txt #1a 表示第一行后面增加一行,如果没有地址限定话就在所有行的后面增加,1i 是在前面增加一行
11 aa
helloworld
22 bb
33 cc
23 dd
55 2e
# 替换行
sed'1c hello world' s.txt #表示替换第一行
sed '/^2/c hello world' s.txt # 替换2开头的行
# 替换部分字符串而不是整行
sed 's/aa/AA/' s.txt #s /待替换的字符串/新字符串/ 只是替换每一行第一个搜索到的字符串替换
sed's/aa/AA/g' s,txt # 是把所有的符合的 字符都替换。g 是全局替换
sed '/^[0-9]/s/aa/AA/g' test.txt #表示以数字开头的 执行s 操作
echo 'aabbccaadd' | sed s#aa#AA#g # #或者/ 是分割符所以并不一定是 /
正则中的元字符
$ 表示行尾
^ 表示行首
[a-z0-9]表示字符范围
[^]表示除了字符集中的字符以外的字符
sed的正则中 \(\) 和 \{m,n\} 需要转义
. 表示任意字符
\* 表示零个或者多个
\+ 一次或多次
\? 零次或一次
\| 表示或语法
其他请参考 https://www.cnblogs.com/wangqiguo/p/6718512.html