学习了Linux下的一些工具,做笔记供时常复习,但这些工具不仅限于Linux。 学习的工具有:sort、uniq、paste、cut、xargs、grep、sed、awk、find。
sort 将文件的每一行作为一个单位,相互比较,比较原则是从首字母向后,依次按ASCII值进行比较,最后将他们升序输出。
选项
含义
不加选项
默认以ASCII升序排序
-r
逆序,即降序排序
-u
去重
-n
以整数来排序
-t -k
-t设定分隔符,-k指定列数排序
-f
小写转大写进行比较,即忽略大小写
-b
忽略每一行前面空白部分
-c
检查是否已经有序,如果乱序,则输出第一个乱序的行信息,返回1
-C
检查是否已经有序,如果乱序,不输出,返回1
例:sort -t ‘:’ -k 2 -n file 分隔符为’:’,对第二行按整数排序
选项
含义
-c
统计重复行出现的次数
-d
只显示重复行
-u
只显示不重复行
例:找出文件中出现次数最多的前三个 sort file|uniq -c|sort -rn|head -n3 排序|去重统计次数|次数逆序|取前三个
paste 粘贴。将多个文件内容进行合并。按行将不同文件行信息放在一起,缺省情况下,paste连接时,用空格或tab键分割新行中不同文本。
选项
含义
-d
指定域分隔符,paste -d# file1 file2
-s
将每个文件合并成行
-
每有一个-,就有一个列分隔符,默认为空格或tab。可以定制输出格式
cut 从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。 必须指定-b、-c或-f标志之一。
选项
含义
-b
以字节为单位进行分割
-c
以字符为单位进行分割
-d -f
-d自定义分隔符,默认为tab,-f指定显示那个区域
echo ‘hello’ | cut -b 1 切出h echo ‘hello’ | cut -b 1-3 切出hel echo ‘hello’ | cut -b 1,3 切出hl echo ‘hello world’ | cut -d’ ’ -f 1 切出hello(1、1,2、2、1-、-2指定不同区域)
xargs 将标准输入数据转换成命令行参数。单行变多行,多行变单行。
选项
含义
-n
指定列数,多行输出。-n3,指定每行三列
-d
自定义一个域分隔符,将特定列打散,指定格式输出
cat file | xargs 多行变单行 echo ‘a#b#c’ | xargs -d#
选项
含义
-E
扩展正则
-v
显示未匹配的部分
-r/R
采用递归方法
-q
安静模式,只匹配,不打印
-i
忽略大小写
-n
输出匹配行的行号
-o
只输出匹配到的部分
sed sed是一种流式编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用。处理时,把当前处理的行存储在临时缓冲区,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直道文件末尾。文件内容并没有改变,除非使用重定向存储输出。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。 默认为基准正则。
选项
含义
-p
/pattern/p 打印匹配pattern的行
-n
只显示匹配成功的
-i
影响原文件
/pattern/s/pattern1/pattern2/g
查找符合pattern的行,将该行所有匹配pattern1的字符串替换为pattern2。带g每一处都替换,不带只替换一次
\1,\2…
子串匹配标记,匹配到的第一个子串标记为\1,通过对标签进行重组,完成数据逆置
-e
允许在同一行执行多条语句
:a
设置标签a
ba
跳转到标签a
模式空间与保持空间 在模式空间(pattern space)中处理数据,保持空间(hold space)只存数据。 模式/保持空间中只有一行数据时,删除末尾换行;有多行时,加上换行。
选项
含义
g
将hold space中的内容拷贝到pattern space中,将原来pattern space里的内容清除
G
将hold space中的内容append(追加)到pattern space
h
将pattern space中的内容拷贝到hold space中,将原来hold space里内容清除
H
将pattern space中的内容append到hold space
d
删除pattern space中所有行,并读入下一行到pattern space中
D
删除multiline pattern中第一行,不读入下一行
x
交换保持空间和模式空间内容
n
读取下一行到pattern space
N
将下一行添加到pattern space
例:1-100求和 seq 100 | sed ‘:a;N;$!ba;s/\n/+g’ bc 产生1-100的序列|数字之间加上加号 计算
awk awk不仅能以行为单位还能以列为单位处理文件。缺省的行分隔符是换行,列分隔符是连续的空格和tab。 基本格式: awk option ‘script’ file1 file2 awk option -f scriptfile file1 file2
选项
含义
{print $2}
打印第2个域
$NF
最后一个域
$(NF-1)
倒数第二个域
print,printf
格式化输出,同C
-F
指定分隔符
-F[:;#]
支持多种符号的分隔符
BEGIN&END 做文本处理之前的准备工作,之后的收尾工作。相当于构造和析构。 格式如下: BEGIN{ } /REG/{ } END{ } BEGIN{ } condition{ } END{ }
例:统计文本中空行数量 awk ‘BEGIN count=0/*/{count++;}END{printf(“%d\n”,count);}’ file
选项
含义
-name
按照文件名查找文件
-perm
按照文件权限查找文件
-depth
查找时,首先查找当前目录中的文件,然后再在子目录中查找
-user
按照文件属主查找
-newer file1 !-newer file2
查找更改时间比file1新但比file2旧的文件
-type
查找某一类型的文件