命令行随笔

1、xargs

xargs命令是将 前一个命令的标准输出作为后一个命令的命令行参数,xargs的默认命令是echo,默认定界符是空格和回车。

而管道是将 前一个命令的标准输出作为后一个命令的标准输入

echo例子

bash 复制代码
# echo "apple banana orange" | xargs echo "I like"
I like apple banana orange

find例子

bash 复制代码
# find . -name "*.txt" | xargs rm

find . -name "*.txt"命令用于查找当前目录下的所有以".txt"为扩展名的文件,并将结果通过管道传递给了xargs命令。xargs命令将每个文件名作为参数传递给rm命令,从而批量删除了这些文件。

-d自定义分隔符
bash 复制代码
# echo '11@22@33' | xargs
'11@22@33'
# echo '11@22@33' | xargs -d @
'11 22 33'
-n指定参数数量
bash 复制代码
# echo '11@22@33@44@55@66@77@88@99@00' | xargs -d '@' -n 3 echo
11 22 33
44 55 66
77 88 99
00

每次传递几个参数给其后面的命令执行,如果xargs从标准输入中读入内容,然后以分隔符分割之后生成的命令行参数有10个,使用 -n 3 表示一次传递给xargs后面的命令是3个参数,因为一共有10个参数,所以要执行4次,才能将参数用完。

-E指定结尾
bash 复制代码
# echo '11 22 33' | xargs -E 33 echo
11 22

当xargs解析出多个命令行参数的时候,如果搜索到-e指定的命令行参数,则只会将-e指定的命令行参数之前的参数(不包括-e指定的这个参数)传递给xargs后面的命令。

注意:-d 和 -E不能同时使用。

-i多次接受输入,默认是{}作为占位符
bash 复制代码
# ls logdir/ | xargs -i mv ./logdir/{} ./logdir/{}.bak

重命名时在每个传递过来的文件名加上后缀.bak,这需要两个参数位。

将不同列作为不同的参数传入

input.txt内容

bash 复制代码
1 2 3
4 5 6
7 8 9

script.sh脚本

bash 复制代码
#!/bin/bash
echo "First column: $1"
echo "Second column: $2"
echo "Third column: $3"

运行shell脚本

bash 复制代码
cat input.txt | awk '{print $0}' | xargs -n 3 ./script.sh

执行结果

bash 复制代码
First column: 1
Second column: 2
Third column: 3
First column: 4
Second column: 5
Third column: 6
First column: 7
Second column: 8
Third column: 9
相关推荐
玉梅小洋3 分钟前
GitHub SSH配置教程
运维·ssh·github
等什么君!9 分钟前
Docker 数据卷:MySQL 数据同步实战
运维·docker·容器
礼拜天没时间.17 分钟前
《Docker实战入门与部署指南:从核心概念到网络与数据管理》:环境准备与Docker安装
运维·网络·docker·容器·centos
每天瞎忙的农民工19 分钟前
Ubuntu 24 安装npm22
linux·运维·ubuntu·npm
Coding_Doggy29 分钟前
服务器迁移 | psql大批量数据以及navicat重新连接、conda 环境迁移
linux·数据库·人工智能
云中飞鸿33 分钟前
虚拟机需要连外网,同时笔记本连接wlan,IP经常变,该怎么配置网络?
服务器·网络·tcp/ip
j_xxx404_34 分钟前
Linux:进程控制(创建/终止/等待/获取退出信息/多进程)
linux·运维·服务器
yuluo_YX36 分钟前
Alias for Linux/Mac
linux·elasticsearch·macos
冉佳驹44 分钟前
Linux ——— 磁盘存储原理与文件系统工作机制
linux·磁盘·硬链接·inode·软链接·磁盘线性化·目录的本质
BUG_MeDe1 小时前
LINUX MTU/MSS(1500 1460等)的一些理解
linux·运维·服务器