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
例:
- 脚本中杀掉某个进程,但不知进程id
screen -ls |grep syncplay |cut -d. -f1 |awk ‘{print $1}’
[17:36:01 root@VM-8-17-centos ~]#screen -ls
There are screens on:
28559.3999 (Detached)
4460.syncplay (Detached)
24437.python3 (Detached)
13382.user (Detached)
12991.docker (Detached)
5 Sockets in /var/run/screen/S-root.
root@a4dd593697ca:/# screen -ls |grep sync |cut -d. -f1
4460
[17:35:32 root@VM-8-17-centos ~]#screen -ls |grep sync |cut -d. -f1 |awk '{print $1}'
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
- 批量清理docker容器或镜像
我要删掉除了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
补充,也可以这样:docker rm -f $(docker ps -a |grep -v sync |cut -d' ' -f1 )
或 docker rm -f $(docker ps -a |grep -v sync |awk '{print $1}')
清理镜像同理。