Linux文件处理常用命令、管道[pipe]:sort, cut、paste, grep, awk, sed

文章目录

  • 1.sort
  • 2.cut 、paste
  • 管道:UNIX Pipes (‘|’)
  • 3.grep
  • grep与正则表达式
  • 4.awk
  • 5.sed


1.sort

语法: sort [opts] [file-list]

选项 功能
- b 忽略主要空白
-d 按照通常的字母顺序排序:忽略除字母、数字和空格以外的所有字符
-f 大小写字母等价
-m “merge”合并已排序的文件
-n 用字符串数值比较,
-r “reverse”, 逆序输出
-t 指定一个分隔符,如-t:,表示用:分隔
-k 指定一个字段为排序的键,如-k1,表示用第一个字段
+n1 [-n2] 指定字段作为排序键,以+n1开始,以-n2结束(未指定-n2,则指定行尾);字段编号以0开始
-o FILE 将排序后的输出发送到FILE,而不是标准输出

如果file-list中没有指定文件,
那么sort将从标准(一般是keyboards)输入中接受输入。

上才艺: sort -t: -nk5 databook
Linux文件处理常用命令、管道[pipe]:sort, cut、paste, grep, awk, sed_第1张图片
上才艺sort -t: -n +4 databook
Linux文件处理常用命令、管道[pipe]:sort, cut、paste, grep, awk, sed_第2张图片

注意这里的 +4 是指下标为4,是第五个字段


2.cut 、paste

在Linux中,可以使用剪切和粘贴命令处理以表的形式存储数据的文件


用cut 就是 , 对表格垂直切片

语法:
cut -blist [-n] [file-list]

cut -clist [file-list]

cut -flist [-dchar] [-s] [file-list]

选项 功能
-b list 按字节bytes来切分
-c list 按字符character来切分
-d char 使用字符char代替字符作为字段分隔符
-f list 剪切列表中指定的字段
-n 不要拆分字符(与-b选项一起使用)
-s 不输出没有分隔符的行

上才艺: cut -d: -f1,5 -s databook
Linux文件处理常用命令、管道[pipe]:sort, cut、paste, grep, awk, sed_第3张图片


paste
补充了剪切命令;
水平连接文件(cat命令垂直连接文件)。
因此,可使用此命令将表粘贴到列中。

语法: paste [options] file-list

-d list 使用列表字符作为行分隔符;是默认字符

直接上才艺了:合并两个表
Linux文件处理常用命令、管道[pipe]:sort, cut、paste, grep, awk, sed_第4张图片
Linux文件处理常用命令、管道[pipe]:sort, cut、paste, grep, awk, sed_第5张图片


又一个才艺:用两个临时表table1、table2,进行paste
Linux文件处理常用命令、管道[pipe]:sort, cut、paste, grep, awk, sed_第6张图片


提升一下境界:用 管道技术 | 来进程间通信
Linux文件处理常用命令、管道[pipe]:sort, cut、paste, grep, awk, sed_第7张图片

这样,就节省了时间空间,无需用临时表。


管道:UNIX Pipes (‘|’)

用来:用于将一个命令的stdout,连接到另一个命令的stdin
stdout:标准输出——一般为screen
stdin:标准输入——一般为keyboard

上才艺:显示当前目录下的所有目录文件:ls –l | grep ‘^d’
Linux文件处理常用命令、管道[pipe]:sort, cut、paste, grep, awk, sed_第8张图片
又如:课堂点名——查谁没登陆:who | wc –l
在这里插入图片描述
看来只有4个孩子(来上课)登录了。


3.grep

目的:在文件中搜索给定的模式、字符串或表达式

语法:grep [options] pattern [file-list]

- i Ignore the case of letters
- n 打印行号
- v 打印nonmatching行
- c 只打印匹配的行数
- w 以字符串形式搜索给定的模式
- l 只打印匹配行的文件名

上才艺:

grep Sarwar students
Linux文件处理常用命令、管道[pipe]:sort, cut、paste, grep, awk, sed_第9张图片

grep -n John students
Linux文件处理常用命令、管道[pipe]:sort, cut、paste, grep, awk, sed_第10张图片


grep命令
可以在多个文件中搜索具有正则表达式和shell元字符的字符串

上才艺:grep –n include *.c

该命令——在当前工作目录中,以.c (C源文件)结尾的
所有文件中搜索字符串“include”
Linux文件处理常用命令、管道[pipe]:sort, cut、paste, grep, awk, sed_第11张图片


grep与正则表达式

直接上才艺:

$ grep '^[A-H]' students
显示学生文件中以字母A到h开头的行。
在这里插入图片描述

grep '[a-z]\{8\}' students
显示学生文件中包含8个连续小写字母的行。
Linux文件处理常用命令、管道[pipe]:sort, cut、paste, grep, awk, sed_第12张图片

$ grep "\
\< 用于表示单词的开头
单引号(或双引号)用于确保shell不会将模式中的任何字母解释为shell元字符
所以,命令显示包含以字符串“Ke”开头的单词的行。
Linux文件处理常用命令、管道[pipe]:sort, cut、paste, grep, awk, sed_第13张图片

grep 'net\>' students
同理,\>表示单词的结尾
所以,该命令display包含以“net”结尾的单词的行。
Linux文件处理常用命令、管道[pipe]:sort, cut、paste, grep, awk, sed_第14张图片


4.awk

awk太强大了,我只能力所能及的说一些简单用法。
这里附一个Linux awk 命令 | 菜鸟教程
以及搜索到的某大佬:Linux三剑客之awk命令

awk,严格上说不是一个命令,而是 一种用于操作数据和生成报表的编程语言
是一种处理文本文件的语言,是一个强大的文本分析工具。


之所以叫 AWK
是因为其取了三位创始人
Alfred Aho,
Peter Weinberger,
和 Brian Kernighan
的 Family Name 的首字符。

语法:
awk '{[pattern] action}' {filenames}
awk 'pattern {action}' filename
awk '{action}' filename
awk 'pattern' filename
awk -F #-F相当于内置变量FS, 指定分割字符

awk的程序指令由模式和操作组成,
即Pattern { Action }的形式
省略Action,则默认执行 print $0


模式(Pattern)用于筛选记录,操作(Action)用于处理字段,操作可以有多个,大括号内用;号隔开。


上才艺了:

awk '$2~"^D"{print $1,$2}' /tmp/student_records
默认空格为分隔符,取第二个字段,以D开头的记录。
打印第一、第二个字段
在这里插入图片描述

awk '$4>3{print $1, $2}' student_records
注意到这里用了关系运算符 > , 指第四个字段数值大于三的行。
Linux文件处理常用命令、管道[pipe]:sort, cut、paste, grep, awk, sed_第15张图片
awk除了可以进行关系运算,还有数值运算和逻辑运算。
Linux文件处理常用命令、管道[pipe]:sort, cut、paste, grep, awk, sed_第16张图片

awk '$4>3 && $3=="CS" ' student_record
Linux文件处理常用命令、管道[pipe]:sort, cut、paste, grep, awk, sed_第17张图片

去重复:

awk  '!a[$0]++'  duplicate.txt  

其主要的原理,是利用AWK的数组a
用每一行($0)作为索引(类似数组下标,像python字典类型的键)
若,行不存在 , a[$0], 返回 0
又因为 ,所以 !a[$0]返回True;
于是就默认Action {print $0}
a[$0] ++ 先返回,后++。
辣摸,第二次读到相同的行(索引),a[$0]++返回正整数
(True)


聪明的,你看懂了么~

5.sed

sed命令可不是小角色,也很牛的。
这儿附一个传送门——Linux sed命令完全攻略(超级详细)


语法:sed '[address]command' filename(s)
英文版的选项与功能:
Linux文件处理常用命令、管道[pipe]:sort, cut、paste, grep, awk, sed_第18张图片
算了,放过自己。
中文版如下:

d 删除行
s (string)一个字符串代替另一个字符串
g (global)全局替换(上面的s只替换一处)
p (print)打印行(输出修改过的行)
a (append)向当前行追加一行或多行文本
i (insert)将文本插入当前行之上。
将命令应用到除所选行之外的所有行。
-n 默认情况下,sed 会在所有的脚本指定执行完毕后,会自动输出处理后的内容,而该选项会屏蔽启动输出,需使用 print (p)命令来完成输出。

上才艺上才艺:

sed '2,3d' data
删除 data 文件内容中的第 2,3 行

sed '/1/,/3/d' data
删除第 1~3 行的文本数据

sed '/^$/d' student_record
删除空白行

sed 's/\
将CS,替换为EECS

sed –n '/\
只显示修改过的行

你可能感兴趣的:(GGStudy,DDLinux,linux,正则表达式)