• 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2.xargs

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

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

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

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

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

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

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

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

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

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

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

    y为是,n为否

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

  • 相关阅读:
    分享10套开源免费的高品质源码,免费源码下载平台
    【数据库范式】实际案例分析
    UnityAndroid加载AssetBundle包时Shader遇到的问题
    【深度学习】手写数字识别
    小程序分包的详细流程
    YOLOv5 学习记录
    vue基础语法02
    工作记录:vue-grid-layout 修改 margin 导致 item 高度剧烈变化
    PyTorch meshgrid 生成网格坐标
    【Linux】标准输出和异常输出
  • 原文地址:https://blog.csdn.net/cronaldo91/article/details/131152266