2012年八月

[shell学习笔记]sort、uniq、cut、paste和split用法详解

今天学习了sort, uniq, cut, paste和split命令的用法,其中sort的选项比较多一些,其它的命令就比较简单了

关于sort,本站之前写过一篇关于sort的高级用法,请点击这里

一、Sort命令

sort [OPTION]… [FILE]…

对文件按指定的域进行排序

常用选项:
  1. -c: 检测文件是否已经排序
  2. -m: 将两个已经排序的文件进行合并
  3. -u: 在排序过程中,删除重复的行
  4. -o: 保存排序后的文件
  5. -t: 域分隔符,默认为空格和tab
  6. -n: 指定待排序的域为数字类型
  7. -r: 逆序排序,默认为正向排序
  8. -b: 按域排序时忽略第一个空格
  9. +n: 按照第n个域进行排序,域从第0个开始计数
  10. +m.n: 按照第m个域的第n个字符开始开始排序
  11. -k: 按照第k个域进行排序,域从第1个开始计数
常见的用法例子:

sort  -o output.txt  your_file.txt  #对文件按第一域进行排序,将排序结果保存到output.txt

sort -t: -r +2n your_file.txt #对文件按照第2个域进行逆向排序,第二个域为数字类型,同时分割符为:

df | sort -b -r -k5  #按照磁盘的占用率从高到底进行排序输出

二、uniq命令

uniq [OPTION]… [INPUT [OUTPUT]]

从文件中去除或删除重复的行,在功能上和sort -u类似

常用选项:
  1. -u: 只显示不重复的行
  2. -d: 只显示重复的行
  3. -c: 打印每一行出现的次数
  4. -fn: 忽略前n个域
常用的用法例子:

uniq sort_file.txt #删除文件中重复的行

uinq -c sort_file.txt  #显示每行出现的次数

uinq -d sort_file.txt  #只显示出现次数>=2的行

三、join命令

join [OPTION]… FILE1 FILE2

将两个排序的文件合并为一个文件

常用选项:
  1. -j n  m: 选择连接的域,n为文件号,m为域号
  2. -o n.m : 指定显示的域,n为文件号,m为域号
  3. -an: 显示文件n中不匹配的文件行
  4. -t: 定义分隔符
常见的用方法:

join  sort_file1.txt  sort_file2.txt  #合并两个文件,以第一个键排序

join  -j 1 1 -j 2 2  sort_file1.txt sort_file2.txt  #按第一文件的第一个域和第二个文件的第二个域作为key,进行合并

join -o 1.1 , 2.2  sort_file1.txt sort_file2.txt  #只显示第一个文件的第一个域和第二个文件的第二个域

四、cut命令

cut OPTION… [FILE]…

从文件中获取指定域

常用选项:
  1. -d: 分割符
  2. -f: 输出域的编号
  3. -c: 输出字符的编号
常见的用法:

cut -d: f3 file.txt #输出以:分割的第三个域

cut  -d: f 1, 6 file.txt #输出以:分割的第一个和第六个域

ls -al | cut -c1-3  #显示ls输出每行的前三个字符

五、paste命令

paste [OPTION]… [FILE]…

将文件的行进行merge

常用选项:
  1. -d:  指定两个文件的行合并后的分割符
  2. -s: 将每个文件合并为一行,而不是按行进行合并
常见用法:

paste file1 file2 #将两个文件的每行合并

paste -d: file1 file2 #将两个文件的每行合并,分隔符为:

paste -s file1 file2 #将file1的内容合并为一行,将file2的内容合并为一行

六、split命令

split [OPTION]… [INPUT [PREFIX]]

将文件按大小分为多份

常用选项:
  1. -output_file-size: 指定文件被分割的行数
  2. prefix: 输出文件的前缀
常见用法:

split -20 file #将文件每20行进行一次分割


    [shell学习笔记]grep和find命令详解

    最新在看《Linux And Unix shell Programing 》,避免看完之后忘记,以后每看一部分都记录下。今天主要记录下linux下

    最常用的两个命令grep和find。

    一、Grep命令

    grep [OPTIONS] PATTERN [FILE...]

    grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

    查找文件中包含某个关键词的行;

    常用选项:
    1. -c : 只输出匹配的行数
    2. -i : 查找不区分大小写
    3. -n: 显示匹配的行号
    4. -v: 显示不包含关键词的行
    5. -A Num: 显示匹配的行及其后面num行
    6. -B Num: 显示匹配的行及其前面的num行
    7. -r:  如果遇到目录递归查询
    8. -E :正则表达式扩展
    常见的用法
    
    grep keyword -r * # 在当前目录及其子目录下查找包含keyword的行
    
    grep --exclude="*\.svn*" keyword -r  *  #功能同上,但是不查找.svn文件
    
    #正则表达式
    
    grep  ‘48[34]’ your_file #查找包含483或者484的行
    
    grep '4\{3,8\}' your_file #查找包含3个到8个4的行
    
    grep -E  '216|329' your_file  #包含216或者329的行
    
    #和其它程序配合使用
    
    ps  aux | grep apache2 | grep -v grep #查找apache2相关进程
    

    二、Find命令

    find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

    在目录中查找文件

    常用选项:
    1. -name: 按照文件名来查找
    2. -type: 按照文件类型查找(b: block  d: directory  )
    3. -perm: 按照权限来查找
    4. -user: 按照文件属主来查找
    5. -group: 按照组来查找
    6. -mtime +n -n: 按照修改时间来查找,-n代表n天以内的修改的文件,+n代表n天以前的修改的文件
    7. -newer fil1 !file2 : 查找比file1新的文件,但是比file2旧的文件
    8. -size n c: 按照文件大小查找,带c表示以字节计算
    9. -exec:  当匹配到文件后,执行某些命令,该命令以 {} \;结束,如果在执行命令前需要确认,请加-ok选项
    常见的用法
    
    find . -name "*.txt" -print  #在当前目录及其子目录中查找以.txt文件为后缀的文件
    
    find . -type d -print #查到当前目录中的目录文件
    
    find . -mtime +5  -name "*.log" -exec rm {} \; #删除5天前得日志
    
    find . -mtime +5  -name "*.log" -ok rm {} \; #功能同上,但是删除前会确认