Linux命令:tr和xargs

本文介绍了Linux中两个重要的命令工具——tr和xargs。tr命令主要用于字符转换和删除,支持删除特定字符、转换字符以及压缩连续重复字符。实验部分展示了如何用tr替换换行符、删除特定字符以及过滤字符。另一方面,xargs常与find命令结合使用,它可以分批处理命令行参数,用于高效处理文件列表。实验中通过xargs实现了多行内容分块输出、文件类型检测、文件复制和内容过滤等操作。
摘要由CSDN通过智能技术生成

目录

一、理论

1.tr

2.xargs

二、实验

1.tr

2.xargs


一、理论

1.tr

(1)概念

 tr主要用于转换或删除文件中的字符。

(2)语法

语法:tr [-d/-c/-s] [字符串1] [字符串2] 文件名
注:字符串1用于查询,字符串2用于处理各种转换

(3)常用选项

表1 tr常用选项

选项功能
-c反选设定字符;用字符串1中字符集的补集替换此字符集,要求字符集为ASCII
-d删除字符串1中所有输入字符
-s缩减连续重复字符成指定的单个字符,最常用的是 tr -s " ",表示把说有字符串中出现的所有连续空格替换成一个

2.xargs

(1)概念

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部
注:xargs要处理的文件如果不是在结尾,需要加上 -i这个参数;否则就不用加-i参数

(2)常用选项

xargs的默认命令是echo,空格是默认定界符。 默认替换符号是{}

表2 xargs常用选项

选项功能
-n次数,将xargs生成的命令行参数,每次传递几个参数给其后面的命令执行
-d自定义定界符
-p会提示让你确认是否执行后面的命令,y执行,n不执行

二、实验

1.tr

(1)将字符串中所有连续的\n转换成一个\n

[root@centos2 /]# echo -e "1\n\n2\n\n3" | tr -s "\n"
1
2
3

同时进行替换多个字符:把字符串中出现的连续的空格oa进行转换成一个空格oa

[root@centos2 /]# echo "hellooo      shellaaa  " | tr -s "[ oa]"
hello shella 

(2)删除字符串中所有的\n

[root@centos2 /]# echo -e "1\n\n2\n\n3" | tr -d "\n"
123[root@centos2 /]# 

(3)将字符串中的某个字符转换成另一个字符,也可以多个字符同时转换

[root@centos2 /]# echo "hello" | tr "h" "H"
Hello
[root@centos2 /]# echo "hello" | tr "hl" "HL"
HeLLo

可以边把连续的字符转成一个字符再进行转换成另一个字符

[root@centos2 /]# echo "hello" | tr -s "l" "L"
heLo
[root@centos2 /]# echo "2023       06  01" |tr -s ' ' '-'
2023-06-01

(4)过滤出只出现某些字符:-d删除 -c 反选

过滤出全是数字的,最后不换行

[root@centos2 /]# echo "abcd1234567" | tr -dc "0-9"
1234567[root@centos2 /]# 

过滤出全是小写字母的,最后不换行

[root@centos2 /]# echo "abcd1234567" | tr -dc "a-z"
abcd[root@centos2 /]# 

过滤出全是大写字母的,最后不换行

[root@centos2 /]# echo "ABCDabcd1234567" | tr -dc "A-Z"
ABCD[root@centos2 /]# 

2.xargs

(1)多行内容的单输出且每行3个

[root@centos2 /]# cat /etc/passwd | xargs -n 3
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP
User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd
Network Management:/:/sbin/nologin dbus:x:81:81:System
message bus:/:/sbin/nologin polkitd:x:999:997:User
for polkitd:/:/sbin/nologin abrt:x:173:173::/etc/abrt:/sbin/nologin
libstoragemgmt:x:998:995:daemon account for
libstoragemgmt:/var/run/lsm:/sbin/nologin rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
……

(2)查找某个目下录下的普通文件,然后使用xargs命令来测试它们分别属于哪类文件

[root@centos2 /]# find /opt -user root -type f | xargs file {}
{}:            cannot open (No such file or directory)
/opt/host.txt: ASCII text
/opt/file.txt: ASCII text

(3)查找文件并复制到别的地方
find命令就可以完成:复制到某个目录

[root@centos2 /]#  find /opt -type f -exec cp -a {} /data2 \;
[root@centos2 /]# ls /data2
file.txt  host.txt

使用find+xargs命令完成:意思是复制到这个文件

[root@centos2 opt]#  find /opt/*.sh -type f | xargs -i cp {} /data2
[root@centos2 opt]# ls /data2
a.sh

(4)过滤出某个目录下的文件中含有root字符

[root@centos2 opt]#  find /etc/passwd -type f | xargs grep "root"
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

(5)xargs的-p参数的使用:会提示是否执行后面的命令

y为是,n为否

[root@centos2 opt]#  find /opt/*.sh -type f | xargs -i -p cp {} /data2
cp /opt/a.sh /data2 ?...y
[root@centos2 opt]# ls /data2
a.sh

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值