1、awk

含义:

  1. awk [options] 'commands' filenames
  2. -F :定义输入字段分隔符,默认的分隔符是空格或者制表符(tab)
  3. FS:输入字段分隔符
  4. OFS:输出字符分隔符
  5. RS:输入行记录分割符,默认换行符为一条记录
  6. ORS:输出行记录分割符,默认输出一条记录后换行
  7. BEGIN{} :行处理前
  8. {} :行处理
  9. END{}:行处理后
  10. $0:表示一行
  11. $1:表示第一列
  12. NF:表示列数
  13. $NF:表示最后一列
  14. NR:行号

分割处理

  1. awk -F":" '{print $0}' /etc/passwd
  2. awk -F":" '{print $NF}' /etc/passwd
  3. awk 'NR==1{print $0}' /etc/passwd 打印第一行
  4. awk -F'[ :\t]' '{print $1,$2,$3}' /etc/passwd 按照空格,tab,:分隔
  5. awk 'BEGIN{FS=":"} {print $1,$2}' /etc/passwd 以:分割,输出列以空格分割
  6. awk 'BEGIN{FS=":";OFS="----"} {print $1,$2}' /etc/passwd 以:分割,输出列以----分割
  7. awk 'BEGIN{FS=":"} {print $1,$2} END{print "ok"}' /etc/passwd 每行记录以{print $1,$2}处理,所有行处理后以END{print "ok"}处理
  8. awk -F: '{print "username is:" $1 "\t uid is:" $3}' /etc/passwd 格式化输出
  9. awk -F":" '{printf "%-15s %-10s %-15s\n", $1,$2,$3}' /etc/passwd 格式化输出,%s字符类型 %d数值类型 %f浮点类型 - 表示左对齐。默认死右对齐 printf默认不会在行尾自动换行,加\n

结合正则处理

  1. awk '/root/' /etc/passwd 过滤带有root单词的行
  2. awk -F":" '/^root/{print $1}' /etc/passwd 过滤带有root单词的行,以:分割,取第一列
  3. awk -F: '$1 ~ /root/' /etc/passwd 第一列带有单词root的行
  4. awk -F: '$1 ~ /root/ {print $NF}' /etc/passwd 第一列带有单词root的行,打印每行的最后一列
  5. awk -F: '$1 !~ /root/ {print $NF}' /etc/passwd 第一列不带单词root的行,打印每行的最后一列

表达式

  1. awk -F":" '$4==0 {print $4,$0}' /etc/passwd 过滤第四列值为0的行,打印第四列和行记录
  2. awk -F: '$3 == 0' /etc/passwd 第三列为0的行
  3. awk -F: '$NF == "/bin/bash"' /etc/passwd 字符串匹配,要完全一样
  4. awk -F: '{if($4==0){print $0}}' /etc/passwd 打印第四列为0的行
  5. awk -F: '{if($4==0){print $1} else{print $4}}' /etc/passwd 第四列如果为0打印第一列,否则打印第四列
  6. awk -F: '{if($3>300){print $0}}' /etc/passwd 大于300的打印整行
  7. awk -F: '$1!~/root/ && $3<=15' /etc/passwd 第一列不含root,且第三列小于等于15
  8. awk -F: '$1~/root/ || $3<=15' /etc/passwd 第一列含root,或者第三列小于等于15
  9. # 打印对齐 #%-30s表示输出字符串,宽度30位,左对齐.%-15s用来指定第二列的,左对齐,宽度15.两个百分号之间可以没有空格.使用\n对每一行的输出加上换行符
  10. cat abc.txt | awk '{printf "%-30s%-15s\n",$1,$2}'
  1. [root@node-1 ~]# printf "%-34s%s/%-12s%-18s%-10s\n" "文件系统" "已用" "总共" "使用率" "挂载点" && df -h | awk '/^\/dev/{printf "%-30s%s/%-10s%-15s%-10s\n",$1,$3,$2,$5,$6}'
  2. 文件系统 已用/总共 使用率 挂载点
  3. /dev/mapper/centos-root 4.7G/17G 28% /
  4. /dev/sda1 151M/1014M 15% /boot
  5. [root@node-1 ~]#

脚本编程

  1. awk -F: '{if($3>0 && $3<1000){i++}} END{print i} ' /etc/passwd 第三列大于0小于1000 i1,最后大于i
  2. awk -F: '{if($3==0){i++} else if($3>999){k++} else{j++}} END{print i;pri nt k;print j}' /etc/passwd
  3. awk 'BEGIN{i=1;while(i<=10){print i;i++}}'
  4. awk -F: '/^root/{i=1;while(i<=7){print $i;i++}}' test
  5. awk -F: '/^root/{for(i=1;i<=NF;i++){print $i}}' test

2、cat

  1. #查看文件
  2. cat wodeqingshu.txt

3、cmp

  1. 比较两个文件是否相同
  2. cmp -s $FILE.bak /etc/$FILE

4、cp

  1. # 复制文件或目录
  2. cp srcFile destFile
  3. #交互,如果目的文件存在,询问是否覆盖
  4. cp -i src dest

5、echo

  1. #把左边的输出放到右边的文件里去
  2. echo "angela" > qingshu.txt
  3. #按原格式输出 `ifconfig` 等价于 $(ifconfig)
  4. echo "`ifconfig`"
  5. -n:不换行输出。
  6. -e:输出转义字符。
  7. echo -e "abc\n123";
  8. 可以输出彩色字符:
  9. echo -e "\033[31mtest\033[0m" ,\033[31m表示开始输出红色字符,\033[0m表示结束输出红色字符,32m:出绿色,30m:黑色。这些代码都属于ansi控制码
  10. echo -e "\e[1;31m this is a red txt \e[1;0m"
  11. echo -e "\e[31m this is a red txt \e[0m"
  12. echo -e "\e[42m this is a red txt \e[0m" 41m 4开头的时背景色。
  13. echo -e "\033[1;31m abc \033[0m" #高亮
  14. echo -e "\033[4;31m abc \033[0m" #下划线
  15. echo -e "\033[7;31m abc \033[0m" #反显

image.png

6、egrep

  1. #查看/proc/cpuinfo中vmx或svm的个数
  2. egrep -c "(vmx|svm)" /proc/cpuinfo
  3. egrep支持正则表达式,grep不支持
  4. -c 统计个数

7、find

  1. -name 按名字
  2. -type 按文件类型 d /f/l/ s
  3. -size 按文件大小 -10M /+10M
  4. -atime 按最后访问时间
  5. -mtime 按最后修改时间 find . -mtime 0 # 0(24小时)天之内修改的文件
  6. -ctime 按创建时间
  1. find test.c #在当前目录下查找test.c文件
  2. find test.* #在当前目录下查找以test.开头的所有文件
  3. find -name "test.*" #在当前目录及子目录下查找以test.开头的所有文件
  4. -iname 忽略大小写
  5. -name: 子目录下也查找
  6. find /home -type d -name "redis" #在home目录下及子目录下查找redis目录
  7. find /home -type f -name "redis" #在home目录下及子目录下查找redis文件
  8. #在文件系统中查找指定的文件
  9. find /etc/ -name "aaa"
  10. #将目前目录及其子目录下所有延伸档名是 c 的文件列出来。
  11. find . -name "*.c"
  12. #将目前目录及其子目录下所有最近 20 天内更新过的文件列出
  13. find . -ctime -20
  14. #为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:
  15. #find / -type f -size 0 -exec ls -l {} \;
  16. 详细命令:https://www.cnblogs.com/Ido-911/p/9638612.html

8、grep

  1. #在指定的文本文件中查找指定的字符串
  2. grep "xxx"
  3. #查询/root目录下带有alias的所有文件
  4. grep -Irl alias /root
  5. -I:不匹配二进制
  6. -r: 递归,可以是目录
  7. -l:不显示匹配的内容
  8. #在当前目录下查询内容包含3306的文件
  9. $grep -Ilr 3306 ./
  10. -I:列出文件内容符合指定的样式的文件名称。
  11. -l:不显示匹配的文件内容
  12. -r:递归操作
  13. -i:忽略大小写
  14. grep -v grep
  15. -v:不显示grep有,显示排除grep关键字的所有信息
  16. grep -Eoe "[0-5]"
  17. -E:扩展正则表达式
  18. -o:仅显示匹配的内容
  19. -e:后接正则表达式

9、head

  1. #查看文件的头部20行 ,程序打出的日志在生产实践中具有非凡的debug的意义
  2. head -20 wodeqingshu.txt

10、less

  1. #不仅可以分页,还可以方便地搜索,回翻等操作
  2. less wodeqingshu.txt

11、ls

  1. #查看目录信息 #ls -l 等价于 ll
  2. ls
  3. ll -i 查看inode

12、mkdir

  1. # 创建文件夹 , -p:如果要创建的文件夹的父目录不存在,则自动创建
  2. mkdir -p a/b/c

13、more

  1. #可以分页看
  2. more wodeqingshu.txt

14、mv

  1. # 移动文件的同时还修改了文件名
  2. mv a/wenjian1.txt b/file1.txt

15、printf

  1. #printf 命令模仿 C 程序库(library)里的 printf() 程序。 格式化输出
  2. printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
  3. printf "%-10s %-8s %-4.2f\n" 郭靖 66.1234
  4. 姓名 性别 体重kg
  5. 郭靖 66.12
  6. %s %c %d %f都是格式替代符
  7. %-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
  8. %-4.2f 指格式化为小数,其中.2指保留2位小数。
  9. printf "%d %s\n" 1 "abc"# 1 abc
  10. 如果没有 arguments,那么 %s NULL代替,%d 0 代替
  11. printf "%s and %d \n" # and 0
  12. 更多查看:https://www.runoob.com/linux/linux-shell-printf.html

16、pwd

  1. #查看当前所处的路径
  2. pwd

17、rename

  1. #将当前目录所有文件中的repo改成repo.bak
  2. rename repo repo.bak *

18、rmdir

  1. #删除空文件夹 (只能删除空文件夹),-r:删除非空文件夹
  2. rmdir -r /a/b

rm

  1. #删除文件, -r: 删除文件夹 ,-f:强制删除文件或文件夹
  2. rm filename

rsync

  1. https://blog.csdn.net/weixin_46669463/article/details/105195798
  2. 推送:rsync 可选项 src源文件 user@host::dest目标文件
  3. rsync 可选项 src源文件 rsync://user@host:port/dest目标文件
  4. 拉取:rsync 可选项 user@host:src源文件 dest目标文件
  5. rsync 可选项 rsync://user@host:port/src源文件 dest目标文件
  6. -------------
  7. -a 递归传输,并保持所有文件的属性
  8. -v 详细模式输出,传输过程中显示进度等详细的信息
  9. -z 传输的时候启动压缩的方式传输,提升效率
  10. -P 大写,显示进度
  11. -p 小写,保持文件的属性不变
  12. -t 保持文件的时间信息不变
  13. --exclude=PATH 排除文件

sftp

  1. sftp root@192.100.3.100
  2. sftp>pwd
  3. sftp>help
  4. 注意:命令前面加一个l表示对本地文件的操作
  5. pwd 查看远程目录
  6. lpwd 查看本地目录
  7. get /root/sf.txt 下载文件
  8. put -r /home # -r 表示上传目录
  9. cd

sed

-r:支持扩展正则, -i:修改文件 ,{}:支持多个命令
示例:

  1. # 匹配以server开头的行,然后将其注释掉
  2. sed -ri 's/(^server.*)/#\1/' /etc/chrony.conf
  3. # 匹配以dataDir=开头的行,然后将其替换成 dataDir=/data
  4. # 在某一行后面添加内容
  5. sed -ri "/^set compatible$/a""set backspace=2" /etc/vim/vimrc.tiny
  6. # 匹配某一行的行号
  7. sed -rn "/^set compatible$/=" vimrc.tiny
  8. # 获取最后一行的内容
  9. sed -n "$"p vimrc.tiny
  10. # 获取最后一行的行号
  11. sed -n "$"= vimrc.tiny
  12. # 替换
  13. sed -ri "s/^set compatible$/set nocompatible/g" vimrc.tiny
  14. # 分组替换,去掉行首的#号
  15. sed -ri "s/^# (alias ls=*)/\1/g" bashrc
  1. 参数说明:
  2. -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
  3. -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
  4. -h或--help 显示帮助。
  5. -n或--quiet或--silent 仅显示script处理后的结果。
  6. -V或--version 显示版本信息。
  7. 动作说明:
  8. a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  9. c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  10. d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
  11. i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  12. p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
  13. s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
  14. a\ 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
  15. c\ 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行
  16. i\ 在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行
  17. d 删除行
  18. h 把模式空间里的内容复制到暂存缓冲区
  19. H 把模式空间里的内容追加到暂存缓冲区
  20. g 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
  21. G 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面
  22. l 列出非打印字符
  23. p 打印行
  24. n 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
  25. q 结束或退出sed
  26. r 从文件中读取输入行
  27. ! 对所选行以外的所有行应用命令
  28. s 用一个字符串替换另一个
  29. g 在行内进行全局替换
  30. w 将所选的行写入文件
  31. x 交换暂存缓冲区与模式空间的内容
  32. y 将字符替换为另一字符(不能对正则表达式使用y命令)
  33. p==print
  34. ddelete
  35. = 打印匹配行的行号
  36. -n 取消默认的完整输出,只要需要的
  37. -e 允许多项编辑
  38. -i 修改文件内容
  39. -r 不需要转义
  40. 指定行数:
  41. ps -aux | grep watchdog | sed -n 2p #1. 指定第一行(sed -n 指定行数)
  42. ps -aux | grep watchdog | sed -n 1,10p #2. 第一至十行
  43. ps -aux | grep watchdog | sed -n 1,100p #3. 超出范围不报错,第一行是1不能是0,否则报错
  44. 添加删除:-e可以不需要
  45. sed -e 4a\newLine testfile #在testfile文件的第四行后添加一行,并将结果输出到标准输出
  46. nl /etc/passwd | sed '2,5d' #将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除!
  47. nl /etc/passwd | sed '3,$d' #要删除第 3 到最后一行
  48. nl /etc/passwd | sed '2d' #删除第二行
  49. nl /etc/passwd | sed '2a drink tea' #在第二行后(亦即是加在第三行)加上『drink tea』字样
  50. nl /etc/passwd | sed '2i drink tea' #那如果是要在第二行前
  51. nl /etc/passwd | sed '2a Drink tea or ......\
  52. > drink beer ?' #在第二行后面加入两行字Drink tea or ......和drink beer ? 每一行之间都必须要以反斜杠『 \ 』
  53. sed '/^$/d' filename #删除空行 除了换行符再没有其它字符的才算空行
  54. sed '/^[[:space:]]*$/d' filename #删除空行 只含有空格、tab 字符的行也算空行
  55. 搜索显示:
  56. cat testfile|sed '/linux/p' -n #查找包含linux的行,显示出来,没有-n 还会显示所有的行
  57. cat testfile|sed '/linux/=' -n #查找包含linux的行,仅显示行号
  58. nl /etc/passwd | sed '/root/d' #删除/etc/passwd所有包含root的行,其他行输出
  59. nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}' #找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔。这里把bash替换为blueshell
  60. 替换:
  61. sed '2,5c No 2-5 number' testfile #将第2-5行的内容取代成为『No 2-5 number』
  62. nl /etc/passwd | sed -n '5,7p'#仅列出 /etc/passwd 文件内的第 5-7 行
  63. 取代:
  64. sed 's/要被取代的字串/新的字串/g'#
  65. /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' #将 IP 前面的部分予以删除
  66. /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g' #在将 IP 后面的部分予以删除
  67. 多点编辑:
  68. nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/' #一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell
  69. #-e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。
  70. 直接修改文件内容(危险动作):
  71. sed -i 选项可以直接修改文件内容
  72. sed -i 's/\.$/\!/g' testfile #将每一行的结尾是.的换为!
  73. #利用 sed 直接在 regular_express.txt 最后一行加入 This is a test:
  74. sed -i '$a This is a test' regular_express.txt #於 $ 代表的是最后一行,而 a 的动作是新增

删除

  1. sed -r 'd' test 删除所有行
  2. sed -r '1d' test 删除第一行
  3. sed -r '1,3d' test 删除13
  4. sed -r '/root/d' test 删除匹配root单词的行
  5. sed -r '/root/,4d' test 删除带有root行,一直到第4
  6. sed -r '/root/,+4d' test 删除带有root行,在删除4
  7. sed -r '1~2d' test 从第一行开始,每间隔2行删除,即:删除所有奇数行
  8. sed -r '8{h;d}' test {}表示有多个命令,对于每行,先暂存,再删除,该命令表示第8行先暂存,再删除
  9. sed -r '$d' test 删除最后一行
  10. sed -r '/^[ \t]*#/d' test 删除以#开头的行
  11. sed -r '/^[ \t]*$/d' test 删除空行
  12. sed -r '/^[[:space:]]*$/d' test 删除空行
  13. sed -r '/^[ \t]*$|^[ \t]*#/d' test 删除空行或以#开头的行
  14. sed -r '/^[ \t]*($|#)/d' test 删除空行或以#开头的行

查找和替换

  1. sed -r 's/root/bin/' test 查找root单词的行,替换每行的第一个root单词为bin
  2. sed -r 's/root/bin/g' test 查找root单词的行,替换每行的所有root单词为bin
  3. sed -r 's/^root/bin/g' test 每行以root单词开头的行,替换为bin开头
  4. sed -r 's/root/bin/gi' test 查找root单词的行,替换每行的所有root单词为bin,忽略大小写
  5. sed -r 's/\/usr\/local/\/var\/lib/g' test 将/usr/local 替换为/var/lib 需要转义
  6. sed -r 's#/usr/local#/var/lib#g' test 将/usr/local 替换为/var/lib 可将/换成其他非字母字符,不需要转义
  7. sed -r '1,5s/(.*)/#\1/' test ()不需要加\,因为有-r。将1-5行最前面加上#
  8. sed -r '1,5s/(.*)/#&/' test 1-5行最前面加上#,&代表前面表达式匹配的内容
  9. sed -r '1,5s/^/#/' test 1-5行最前面加上#,&代表前面表达式匹配的内容

暂存空间

  1. 默认情况下,暂存空间里面是个换行符(空行)
  2. sed -r 'g' file 处理第一行时,从暂存空间拿过来一个换行符,拿来覆盖,第二行类推
  3. sed -r 'G' file 处理第一行时,从暂存空间拿过来一个换行符,拿来追加,这行下面会增加一个空行,第二行以此类推
  4. 暂存和取用命令:hHgG
  5. sed -r '1h;$G' /etc/hosts 把/etc/hosts的第1行覆盖写到暂存空间(模式空间只有1行,暂存空间只有1行),
  6. 然后把暂存空间的内容追加到/etc/hosts的最后1
  7. (相当于把/etc/hosts的第1行复制到最后一行)
  8. sed -r '1{h;d};$G' /etc/hosts 把第1行覆盖写到暂存空间,并删除/etc/hosts的第1行,然后把暂存空间的内容追加到最后一行(相当于把/etc/hosts的第1行复制到最后一行,并删除第1行)
  9. sed -r '1h;2,$g' /etc/hosts 把第1行放到暂存空间,然后将暂存空间的内容放到第2行至最后一行
  10. sed -r '1h;2,3H;$G' /etc/hosts 把第123行放到模式空间,然后追加到 /etc/hosts文件的最后一行
  11. 反向选择:!
  12. sed -r '3!d' /etc/hosts 除了第3行外都删除

22、seq

  1. seq 10 #1 2 3 4 5 6 7 8 9 10 1到10序列 默认1开始
  2. seq 1 10 #1 2 3 4 5 6 7 8 9 10 1到10序列
  3. seq 1 2 10 #1 3 5 7 9 1到10序列 ,步长为2

23、scp

  1. #1、上传目录:
  2. scp [-r] ./util root@192.168.1.65:/home/wwwroot/limesurvey_back/scp
  3. #2、上传文件,-P:指定端口 默认端口22
  4. scp -P 2200 ./util root@192.168.1.65:/home/wwwroot/limesurvey_back/scp
  5. #下载文件:从192.100.3.30拉取文件
  6. scp root@192.100.3.30:/home/app/util.txt /home

24、tail

  1. #实时刷新显示文件的尾部
  2. tail -f user.log
  3. # 查看文件的尾部的10行
  4. tail -10 wodeqingshu.txt

25、tar

  1. tar -cvf testdir.tar testdir/ 归档
  2. gzip testdir.tar 压缩
  3. gzip file
  4. bzip file
  5. tar -czvf testdir.tar.gz testdir/
  6. tar -xzvf testdir.tar.gz 解压到当前目录下
  7. tar -zxvf testdir.tar.gz -C Downloads/ 解压到指定的Downloads目录下
  8. 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个
  9. -c: 建立压缩档案
  10. -x:解压
  11. -t:查看内容
  12. -r:向压缩归档文件末尾追加文件
  13. -u:更新原压缩包中的文件
  14. 可选的参数
  15. -z:有gzip属性的
  16. -j:有bz2属性的
  17. -Z:有compress属性的
  18. -v:显示所有过程
  19. -O:将文件解开到标准输出
  20. -num :用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6
  21. 下面的参数-f是必须的
  22. -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。

26、tee

  1. 将标准输入复制到每个指定文件,并显示到标准输出。
  2. tee [选项]... [文件]...
  3. -a, --append 内容追加到给定的文件而非覆盖
  4. -i, --ignore-interrupts 忽略中断信号
  5. --help 显示此帮助信息并退出
  6. --version 显示版本信息并退出
  7. 如果文件指定为"-",则将输入内容复制到标准输出。
  8. tee -a demo.txt 追加内容

27、touch

  1. #创建一个空文件
  2. touch a.avi

28、vi/vim

参考

29、wc

  1. wc -l 统计文本信息(-l行数,-w词数,-m字符数)

30、xargs

  1. #将grep输出的内容一次发一个给xargs处理,xargs将内容交给cat作为参数
  2. grep -Ilr 3306 ./ | xargs -n1 cat
  3. echo "1 2 3 4" |xargs -n1 echo #相当于echo 1 ,echo 2 ,echo 3, echo 4 ,xargs默认使用echo作为命令
  4. echo "1 2 3 4" |xargs -n2 echo #echo 1 2 ,echo 3 4
  5. ls ./ | xargs -n1 ls #ls xx ,ls xxx ,ls xxx
  6. echo "aXbXcXd" |xargs -n1 -dX -I {} echo {}.bak
  7. -d :以X分割,默认回车
  8. -I :将值赋值给变量,以便后面使用 ,可以使用{}接受,也可使用其他的变量,如var