cut

Linux cut命令用于显示每行从开头算起 num1 到 num2 的文字。

语法

cut [-bn] [file]
cut [-c] [file]
cut [-df] [file]
使用说明:
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
参数:

  • -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
  • -c :以字符为单位进行分割。
  • -d :自定义分隔符,默认为制表符。
  • -f :与-d一起使用,指定显示哪个区域。
  • -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
    范围之内,该字符将被写出;否则,该字符将被排除

awk

用法很多,看 https://www.runoob.com/linux/linux-comm-awk.html

例:

  1. 脚本中杀掉某个进程,但不知进程id

screen -ls |grep syncplay |cut -d. -f1 |awk ‘{print $1}’

  1. [17:36:01 root@VM-8-17-centos ~]#screen -ls
  2. There are screens on:
  3. 28559.3999 (Detached)
  4. 4460.syncplay (Detached)
  5. 24437.python3 (Detached)
  6. 13382.user (Detached)
  7. 12991.docker (Detached)
  8. 5 Sockets in /var/run/screen/S-root.
  9. root@a4dd593697ca:/# screen -ls |grep sync |cut -d. -f1
  10. 4460
  11. [17:35:32 root@VM-8-17-centos ~]#screen -ls |grep sync |cut -d. -f1 |awk '{print $1}'
  12. 4460

我需要在脚本中关闭syncplay这个虚拟窗口

screen -ls | grep syncplay-server | cut -d. -f1 | awk '{print $1}' | xargs kill

xargs 传递参数给命令:https://www.runoob.com/linux/linux-comm-xargs.html

  1. 批量清理docker容器或镜像

image.png
我要删掉除了syncplayer和syncplay-debian以外的所有容器。
docker删除容器的命令是docker rm -f CONTAINER-ID1 CONTAINER-ID2 CONTAINER-ID3 ......这样要一个个复制容器id。
一条命令搞掂:docker ps -a |grep -v sync |cut -d' ' -f1 |xargs docker rm -f
docker ps -a |grep -v sync |awk '{print $1}' |xargs docker rm -f
image.png
补充,也可以这样:docker rm -f $(docker ps -a |grep -v sync |cut -d' ' -f1 )
docker rm -f $(docker ps -a |grep -v sync |awk '{print $1}')

清理镜像同理。