Linux命令:tr和xargs

目录

一、理论

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

你可能感兴趣的:(linux,运维,服务器)