shell特殊符号cut、sort_wc_uniq、tee_tr_split命令

10月15日任务

8.10 shell特殊符号cut命令

8.11 sort_wc_uniq命令

8.12 tee_tr_split命令

8.13 shell特殊符号下

 

截取命令:cut

  • -d 分隔符
  • -f 字段
#截取/etc/passwd的前十行的第1,2个字段
[root@centos7 ~]# cat /etc/passwd | head -n 5 | cut -d ":" -f 1,2
root:x
bin:x
daemon:x
adm:x
lp:x
  • -c 指定第几个字符
[root@centos7 ~]# cat /etc/passwd | head -n 5 | cut -c 1
r
b
d
a
l

排序命令:sort

ASCII码顺序排序内容

  • -n 按数字顺序排序(默认字母排在数字前)
[root@centos7 ~]# cat /etc/passwd | head -n 5 | sort -n
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
  • -r 按反序
[root@centos7 ~]# cat /etc/passwd | head -n 5 | sort -r
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
  • -t 分隔符,配合-k n/ -k n1,n2
# 按第三个字段的字母顺序排序
[root@centos7 ~]# cat /etc/passwd | head -n 5 | sort -t ":" -k 3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

统计命令:wc

# 测试数据
[root@centos7 ~]# cat /etc/passwd | head -n 5
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  • -l 显示文本内容的行号
[root@centos7 ~]# cat /etc/passwd | head -n 5 | wc -l
5
  • -m/c 显示字符数
[root@centos7 ~]# cat /etc/passwd | head -n 5 | wc -m / c
183
  • -w 显示文本内的单词数,以空格分割
[root@centos7 ~]# cat /etc/passwd | head -n 5 | wc -w
5

cat -A 显示行尾的换行符

除重命令:uniq

去除文本内的重复行,前提需要先排序

[root@centos7 ~]# cat 1.txt | uniq
num111
passwd this is a
num111
passwd
num111
|
# 不排序
[root@centos7 ~]# cat 1.txt | uniq -c
      1 num111
      1 passwd this is a
      1 num111
      1 passwd
      4 num111
      1 |
      
# 先排序再去重
[root@centos7 ~]# cat 1.txt | sort -n | uniq -c
      1 |
      6 num111
      1 passwd
      1 passwd this is a

重定向并显示:tee

重定向内容至文本的同时在终端显示

[root@centos7 ~]# cat /etc/passwd | head -n 5 | tee tee.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@centos7 ~]# cat tee.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  • -a 追加内容
[root@centos7 ~]# cat /etc/passwd | tail -n 1 | tee -a  tee.txt
castiel:x:1000:1000::/home/castiel:/bin/bash
[root@centos7 ~]# cat tee.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
castiel:x:1000:1000::/home/castiel:/bin/bash

字符替换命令:tr

转换内容,tr

[root@centos7 ~]# echo "test" | tr "s" "S"
teSt

文件切割命令:split

split切割文件

# 测试文件
[root@centos7 tmp]# find / -type f -name "*.conf" -exec cat {} >> test.txt \;

[root@centos7 tmp]# ll
总用量 676
-rw-r--r--. 1 root root 688355 9月  30 23:10 test.txt
[root@centos7 tmp]# du -sh test.txt 
676K	test.txt
  • -b 按指定大小切割,不加单位默认为b(字节)
# 按大小进行切割
[root@centos7 tmp]# split -b 100K test.txt test-
[root@centos7 tmp]# ll
总用量 1352
-rw-r--r--. 1 root root 102400 9月  30 23:11 test-aa
-rw-r--r--. 1 root root 102400 9月  30 23:11 test-ab
-rw-r--r--. 1 root root 102400 9月  30 23:11 test-ac
-rw-r--r--. 1 root root 102400 9月  30 23:11 test-ad
-rw-r--r--. 1 root root 102400 9月  30 23:11 test-ae
-rw-r--r--. 1 root root 102400 9月  30 23:11 test-af
-rw-r--r--. 1 root root  73955 9月  30 23:11 test-ag
-rw-r--r--. 1 root root 688355 9月  30 23:10 test.txt

[root@centos7 tmp]# rm -f test-*
  • -l 按指定行数切割

切割时不指定文件前缀,将以特定命名

# 按行数进行分割
[root@centos7 tmp]# cat test.txt | wc -l
28439
[root@centos7 tmp]# split -l 7000 test.txt test-
[root@centos7 tmp]# ll
总用量 1356
-rw-r--r--. 1 root root 259864 9月  30 23:13 test-aa
-rw-r--r--. 1 root root 138784 9月  30 23:13 test-ab
-rw-r--r--. 1 root root 105356 9月  30 23:13 test-ac
-rw-r--r--. 1 root root 172792 9月  30 23:13 test-ad
-rw-r--r--. 1 root root  11559 9月  30 23:13 test-ae
-rw-r--r--. 1 root root 688355 9月  30 23:10 test.txt

shell特殊符号

  • $
    • 变量的值 echo $PATH
    • 正则表示行尾
    • !$表示上一条命令的最后一个参数
  • ;
    • 多条命令单行编辑连续执行
  • ~
    • 用户家目录
    • 正则表示匹配符
  • &
    • 后台运行进程
  • 定向
    • > 重定向
    • >> 追加重定向
    • 2> 错误重定向
    • 2>> 错误追加重定向
    • &> 重定向与错误重定向
  • []
    • 范围选其一,[0-9],[a-zA-Z]
  • ||
    • 命令1 || 命令2
      • 命令1正确执行,命令2不执行
      • 命令1执行错误,命令2执行
  • &&
    • 命令1 && 命令2
      • 命令1执行正确,命令2执行
      • 命令1执行错误,命令2不执行
[root@centos7 tmp]# ll
总用量 0
# 当前目录下,test目录不存在,返回错误代码1
[root@centos7 tmp]# [ -d test ]
[root@centos7 tmp]# echo $?
1

# && :命令1返回错误,命令2--mkdir命令不执行
[root@centos7 tmp]# [ -d test ] && mkdir test
[root@centos7 tmp]# echo $?
1

# || :命令1返回错误,执行mkdir命令
[root@centos7 tmp]# [ -d test ] || mkdir test
[root@centos7 tmp]# echo $?
0

# 此时test目录已存在,命令1返回0,命令2不执行
[root@centos7 tmp]# [ -d test ] ||  mkdir test
[root@centos7 tmp]# echo $?
0

[root@centos7 tmp]# ll
总用量 0
drwxr-xr-x. 2 root root 6 9月  30 23:31 test

# 命令1执行正确,命令2也执行
[root@centos7 tmp]# [ -d test ] && mkdir test
mkdir: 无法创建目录"test": 文件已存在

转载于:https://my.oschina.net/u/3964535/blog/2245819

  • 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、付费专栏及课程。

余额充值