Linux命令之grep/sort/uniq/cut

grep

    -n    显示行号
    -v    剔除掉过滤内容的那一行后显示出来
    -w    精确匹配字符串(左右没有其他字母)
    -x    整行匹配
    grep "\<root\>"  精确匹配字符串(左右没有其他字母)  grep "\brootb>" 
    -i    不区分大小写
    -c    匹配到的行数
    -E    同时过滤多个字符串grep -E=egrep
    -o   仅显示匹配regexp的内容(用于统计出现在文中的次数)# grep -o root passwd | wc -l
    -q    静默模式。匹配到$?返回0,否则返回1
    -B     除了显示匹配行外,并显示该行之前的num行 #grep '30' -B 10 file
    -A    除了显示匹配行外,并显示该行之后的num行
    -C    除了显示匹配行外,并显示该行之前后各num行
          --colour=auto    给匹配到的字符串加颜色
    -a     在二进制文件中,以文本文件的方式搜索数据
    -l     查询多文件时,只输出包含匹配字符的文件名
    -H     显示文件名
    -s    不显示不存在或者无匹配文本的错误信息
    #grep  -E "root|gtms" passwd        grep出包含root或gtms的行
    #grep -E "^(r|R)" file        grep出包含r或R的行
    # grep "^[^210]" file               不是2、1、0开头的行,括号内的是取反
    #grep "H*P"  file        grep出H在前,P在后的行
    #grep "[5-8][6-9][0-3]"  file
    #grep "4\{2,4\}" file            4出现2到4次的行
    #grep "^$" file | wc -l         空行数
    #grep "\?" file                 包含问号的行
    #grep "^[^d]" file              grep出非d字符开头的行
    #grep "[0-9]\{1,3\}"\."[0-9]\{1,3\}"\."[0-9]\{1,3\}"\."[0-9]\{1,3\}" file    匹配ip地址
    #egrep "[0-9]{1,3}"\."[0-9]{1,3}"\."[0-9]{1,3}"\."[0-9]{1,3}" file        匹配ip地址


# cat gtms.log
200 gtms
0200 gtmsboy
2000 littlegtms

# grep 200 gtms.log
200 gtms
0200 gtmsboy
2000 littlegtms
# grep \b200\b gtms.log
# grep "\b200\b" gtms.log 需左右没有字符
200 gtms
# grep "\<200\>" gtms.log   同上
200 gtms
# grep -w "200" gtms.log   效果同上
200 gtms
# grep -x "200" gtms.log 匹配整行,所以没有

 

cut

-d, --delimiter=DELIM        指定分隔符,默认tab
-f, --fields=LIST            指定域,列
-c, --characters=LIST        按字符截取
-b, --bytes           按字节截取
# head -2 /etc/passwd | cut -d: -f5,7    以冒号分割,取5列和7列
root:/bin/bash
bin:/sbin/nologin
# head -2 /etc/passwd | cut -d: -f5-7    以冒号分割,取5至7列
root:/root:/bin/bash
bin:/bin:/sbin/nologin

# head -2 /etc/passwd | cut -c 1-4,5,6    按字符截取,先截取1-4列,再第5列,再第7列
root:x
bin:x:



sort

-c    检查文件是否已经按照顺序排序;
-m    将几个排序好的文件进行合并;
-n    依照数值的大小排序;
-o <file>  将排序后的结果存入制定的文件;
-r    以相反的顺序来排序;
-t    指定排序时所用的栏位分隔字符; 
-k    指定列
-u    删除复制行(只去重相邻行)
  # sort -u filename      排序去重
  # sort filename | uniq -c  排序后统计
  # sort -nrk 2 -t: filename    以冒号为分隔,第二列按数字逆排序
  # sort -t: -k1.2 filename     以冒号分隔,按照第一列第二个字符开始排序
  # sort -t: -k1.2 -nrk 3,3 filename  只对第一列第二个字符,然后只对第三个列排序


sort 默认按整行排序。四个重要参数 -n -r -t -k
  -k, --key=POS1[,POS2]
    start a key at POS1 (origin 1), end it at POS2 (default  end  of line)   
  -k 1,1        第一个字段开始排序到第一个字符结束
  -k 1.1,3.3    表示第一个字段的第一个字符开始排序到第三个字段的第三个字符结束

[root@node85 tmp]# cat test.txt
192.168.0.123 a
192.168.0.21 b
192.168.0.21 b
192.168.0.65 t
192.168.0.1 n
192.168.0.21 b
192.168.0.100 k
[root@node85 tmp]# uniq test.txt
192.168.0.123 a
192.168.0.21 b
192.168.0.65 t
192.168.0.1 n
192.168.0.21 b
192.168.0.100 k
[root@node85 tmp]# sort test.txt | uniq
192.168.0.100 k
192.168.0.123 a
192.168.0.1 n
192.168.0.21 b
192.168.0.65 t
[root@node85 tmp]# sort test.txt | uniq -c
      1 192.168.0.100 k
      1 192.168.0.123 a
      1 192.168.0.1 n
      3 192.168.0.21 b
      1 192.168.0.65 t
[root@node85 tmp]# sort -n test.txt       
192.168.0.100 k
192.168.0.123 a
192.168.0.1 n
192.168.0.21 b
192.168.0.21 b
192.168.0.21 b
192.168.0.65 t
[root@node85 tmp]# sort -t" " -k2 test.txt
192.168.0.123 a
192.168.0.21 b
192.168.0.21 b
192.168.0.21 b
192.168.0.100 k
192.168.0.1 n
192.168.0.65 t

uniq

-u     只显示不重复的行       only print unique lines
-d     只显示有重复的数据行     only print duplicate lines
-c     打印每行出现次数,要配合sort,然后只是相邻的才归类

 

转载于:https://www.cnblogs.com/gtms/p/6649453.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
k1++; } else if (board[i+k][j+k] == -turn || k1 == 0) { if (k1 > 0) { k2++; } k1 = 0; } if (k1 ==Bash管道(pipe)命令是将多个命令通过管道符(|)连接在一起,使得前一个 6) { value += 10000; } else if (k1 > 0 && i+k > 0 && i命令的输出成为下一个命令的输入,以此类推,形成一个流水线。下面是常+k < ROWS - 1 && j+k > 0 && j+k < COLS - 1 && board[i+k-1用的一些命令: 1. cut:用于剪切文本文件中的字段,可以按列或字符位置进行][j+k-1] == 0 && board[i+k+1][j+k+1] == 0) { value +=剪切。 示例: ``` cut -d',' -f1 file.csv # 按逗号分隔,提取第一 100; // 可以成五 } else if (k1 > 0 && i+k > 0 && i+k <列 cut -c1-5 file.txt # 提取文本文件的前5个字符 ``` 2. grep: ROWS - 1 && j+k > 0 && board[i+k-1][j+k-1] == 0) { value += 10; // 可以成四 } else if (k1 > 0 && i+k < ROWS - 用于按照指定的模式搜索文本文件中的内容,并将匹配的行输出。 示例: ``` 1 && j+k < COLS - 1 && board[i+k+1][j+k+1] == 0) { valuegrep 'pattern' file.txt # 搜索文本文件中包含pattern的行 grep -v 'pattern' file.txt # += 10; // 可以成四 } else if (k1 > 0 && i+k > 1 && j+k 搜索文本文件中不包含pattern的行 ``` 3. sort:用于对文本文件的行进行排序。 > 1 && board[i+k-1][j+k-1] == turn && board[i+k-2][j+k-2]示例: ``` sort file.txt # 按照字典序升序排序 sort -n file.txt # 按照数字 == 0) { value += 5; // 可以成三 } else if (k1 > 0 && i大小升序排序 ``` 4. wc:用于统计文本文件中的行数、单词数和字符数+k < ROWS - 2 && j+k < COLS - 2 && board[i+k+1][j+k+1] ==。 示例: ``` wc -l file.txt # 统计文本文件的行数 wc -w file.txt # turn && board[i+k+2][j+k+2] == 0) { value += 5; // 可以成三 统计文本文件的单词数 wc -c file.txt # 统计文本文件的字符数 ``` 5 } } if (k1 > 0) { k2++; } if (k2 > . uniq:用于去除文本文件中的重复行。 示例: ``` sort file.txt | uniq # 将0) { value += k2 * k2; // 连子数越多,价值越高 } k1文本文件排序并去重 ``` 6. tee:用于将命令的输出同时输出到屏幕和文件中 = 0; k2 = 0; } } // 左下到右上 for (int i =。 示例: ``` ls -l | tee file.txt # 将ls命令的输出同时输出到屏幕和文件中 5; i < ROWS; i++) { for (int j = 0; j < COLS - 5; j ``` 7. tr:用于对文本文件进行字符转换。 示例: ``` tr 'a-z' '++) { for (int k = 0; k < 6; k++) { if (board[i-k][j+k]A-Z' file.txt # 将文本文件中的小写字母转换为大写字母 ``` 8. == turn) { k1++; } else if (board[i-k][j+k] == -turn || k1 == 0) { if (k1 > 0) { k2++; } k1 = 0; } col:用于过滤文本文件中的控制字符。 示例: ``` col -b file.txt # 过滤 if (k1 == 6) { value += 10000; } else if (k1 > 0 && i-k文本文件中的控制字符 ``` 9. join:用于将两个文本文件中的相同字段进行 > 0 && i-k < ROWS - 1 && j+k > 0 && j+k < COLS - 1 && 合并。 示例: ``` join file1.txt file2.txt # 将file1.txt和file2.txt中相同的 board[i-k-1][j+k+1] == 0 && board[i-k+1][j+k-1] == 0字段合并 ``` 10. paste:用于将两个文本文件的对应行合并成一行。 示) { value += 100; // 可以成五 } else if (k1 > 0 && i-k < ROW例: ``` paste file1.txt file2.txt # 将file1.txt和file2.txt的对应行合并成一S - 1 && j+k > 0 && j+k < COLS - 1 && board[i-k+1][j+k行 ``` 11. expand:用于将文本文件中的制表符转换为空格。 示例: ``` expand file.txt # 将文本文件中的制表符转换为空格 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值