【tr命令和xargs命令详解】

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

1.语法:tr [-d/-c/-s] [字符串1] [字符串2] 文件名
注:字符串1用于查询,字符串2用于处理各种转换
-c:反选设定字符;用字符串1中字符集的补集替换此字符集,要求字符集为ASCII
-d:删除字符串1中所有输入字符
-s:缩减连续重复字符成指定的单个字符,最常用的是 tr -s " ",表示把说有字符串中出现的所有连续空格替换成一个
2.应用:
1.将字符串中所有连续的\n转换成一个\n

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

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

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

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

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

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

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

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

[root@node1 ~]# echo "hello" | tr -s "l" "L"
heLo
[root@node1 ~]# echo "2018       06  01" |tr -s ' ' '-'
2018-06-01

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

[root@node1 ~]# echo "cdnj289709" | tr -dc "0-9" #过滤出全是数字的,最后不换行
289709[root@node1 ~]# echo "cdnj289709" | tr -dc "a-z"  #过滤出全是小写字母的,最后不换行
cdnj[root@node1 ~]# echo "cdnj289709" | tr -dc "A-Z"  #过滤出全是大写字母的,最后不换行

二、xargs命令 戳这里

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部
注:xargs要处理的文件如果不是在结尾,需要加上 -i这个参数;否则就不用加-i参数
xargs常见命令参数:
xargs的默认命令是echo,空格是默认定界符。 默认替换符号是{}
-n:次数,将xargs生成的命令行参数,每次传递几个参数给其后面的命令执行
-d 自定义定界符
-p:会提示让你确认是否执行后面的命令,y执行,n不执行

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

[root@node1 1]# 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:998:User
for polkitd:/:/sbin/nologin sshd:x:74:74:Privilege-separated
SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin
mysql:x:997:995:MySQL server:/var/lib/mysql:/sbin/nologin centos:x:1000:1000::/home/centos:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin heihei:x:995:993::/home/heihei:/bin/bash p:x:994:994::/home/p:/bin/bash
jack:x:1001:1001::/home/jack:/bin/bash student:x:2000:0::/home/student:/bin/bash bob:x:993:776::/home/bob:/bin/bash

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

[root@node1 1]# find /1 -user root -type f | xargs file {}
{}:           cannot open (No such file or directory)
/1/q:         ASCII text
/1/1.sh:      Bourne-Again shell script, UTF-8 Unicode text executable
/1/hello.txt: ASCII text, with no line terminators
/1/1.tar.gz:  gzip compressed data, from Unix, last modified: Tue Jun 16 19:50:02 2020

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

[root@node1 1]# find /1 -type f -exec cp -a {} /2 \;

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

[root@node1 1]# [root@node1 1]# find /1/*.sh -type f | xargs -i cp {} /3

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

[root@node1 1]# find /1 -type f | xargs grep "root"
/1/1.sh:if [ $USER = 'root' ]
/1/2.txt:root
[root@node1 1]# find /1 -type f -exec grep {}  "root" \;   #不可行
grep: root: 没有那个文件或目录
grep: root: 没有那个文件或目录
grep: root: 没有那个文件或目录
grep: root: 没有那个文件或目录

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

[root@node1 1]# find /1/*.sh -type f | xargs -i -p cp {} /3
cp /1/1.sh /3 ?...n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑着蜗牛追汤圆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值