Linux Shell 用法(二)xargs和tr命令

本文深入探讨Linux Shell中的xargs和tr命令。xargs能将多行输入转化为单行,通过-n选项控制参数个数,-d选项定制分隔符。tr命令则专注于字符转换,它不能接受命令行参数,通过stdin处理输入。tr的-d选项用于删除指定字符,-c选项用于字符组补集操作,可用于加密解密、字符压缩等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

xargs

将多行输入转换成单行输出。

$ cat example.txt
123456 7 8 9 10
11 12
# 样例文件
$ cat example.txt | xargs 1 2 3 4 5 6 7 8 9 10 11 12

将单行输入转换成多行输出。 xargs的-n选项可以限制每次调用命令时用到的参数个数。下面的命令将输入分割成多
行,每行N个元素:

$ cat example.txt | xargs -n 3
1 2 3
4 5 6
7 8 9
10 11 12

-d选项可以为输入数据指定自定义的分隔符:


$ echo "splitXsplit2Xsplit3Xsplit4" | xargs -d X 
Split1 split2 split3 split4

用–d选项将X定义为 输入分隔符。
结合-n选项,可以将输入分割成多行,每行包含两个单词:


$ echo "splitXsplitXsplitXsplit" | xargs -d X -n 2 split split
split split

使用了grep找出内容中不包含image的文件:

$ find /smbMount -iname '*.docx' -print0 | xargs -0 grep -L image

tr

tr只能通过stdin(标准输入)接收输入(无法通过命令行参数接收)。其调用格式如下:

tr [options] set1 set2

用tr进行数字加密和解密的例子:

$ echo 12345 | tr '0-9' '9876543210'
87654 # 已加密
$ echo 87654 | tr '9876543210' '0-9'
12345 # 已解密

用tr删除字符 tr有一个选项-d,可以通过指定需要被删除的字符集合,将出现在stdin中的特定字符清除掉:

$ cat file.txt | tr -d '[set1]' #只使用set1,不使用set2

例如:

$ echo "Hello 123 world 456" | tr -d '0-9' 
Hello world
# 将stdin中的数字删除并打印删除后的结果

字符组补集
我们可以利用选项-c来使用set1的补集。下面的命令中,set2是可选的:

tr -c [set1] [set2]

如果只给出了set1,那么tr会删除所有不在set1中的字符。如果也给出了set2,tr会将不 在set1中的字符转换成set2中的字符。如果使用了-c选项,set1和set2必须都给出。如果-c 与-d选项同时出现,你只能使用set1,其他所有的字符都会被删除。
下面的例子会从输入文本中删除不在补集中的所有字符:

$ echo hello 1 char 2 next 4 | tr -d -c '0-9 \n' 124

接下来的例子会将不在set1中的字符替换成空格:

 $ echo hello 1 char 2 next 4 | tr -c '0-9' ' '

124

用tr压缩字符

tr -s '[需要被压缩的一组字符]'

tr可以将不同的字符类作为集合使用

alnum:字母和数字。
alpha:字母。
cntrl:控制(非打印)字符。  digit:数字。
graph:图形字符。
lower:小写字母。
print:可打印字符。
punct:标点符号。
space:空白字符。
upper:大写字母。
xdigit:十六进制字符。
#可以按照下面的方式选择所需的字符类:
tr [:class:] [:class:]
#例如:
tr '[:lower:]' '[:upper:]'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值