首页 > 系统相关 >linux 命令值xargs与tr

linux 命令值xargs与tr

时间:2024-11-13 15:18:25浏览次数:1  
标签:字符 xargs tr 命令 ls linux txt

管道符 | 允许将一个命令的输出作为另一个命令的输入。然而,管道符在处理某些类型的输入时存在局限性,特别是当需要将一系列输入项作为单个命令的多个参数时()。

xargs 的出现正是为了解决这个问题。xargs 能够从标准输入(stdin)读取数据,并将这些数据转换为特定命令的参数列表。这使得 xargs 在处理大量输入项时非常有用,特别是当这些输入项需要作为单个命令的多个参数时。

以下是一些 xargs 相对于管道符 | 的优势:

  1. 参数构建:xargs 可以将多个输入项组合成一个参数列表,然后一次性传递给命令。这对于需要处理大量文件或数据的场景特别有用。

  2. 处理复杂输入:xargs 提供了多种选项来处理复杂的输入,比如指定分隔符(-d)、限制每次命令运行的参数个数(-n)以及使用自定义的占位符(-I)。

  3. 安全性:在处理包含空格、换行符等特殊字符的文件名时,xargs 的 -0 选项可以与 find 命令的 -print0 选项结合使用,以确保正确处理这些特殊字符。

  4. 灵活性:xargs 可以与其他命令和工具结合使用,以构建复杂的命令行管道。例如,你可以将 find 命令的输出通过管道传递给 xargs,然后使用 xargs 来执行 rm 命令删除找到的文件。

tr命令

tr 主要用于替换或删除文件中的字符。tr 命令通过从标准输入读取数据,然后对其进行处理,并将结果输出到标准输出(通常是屏幕,但也可以重定向到文件)。

常用选项

  • -c 或 --complement:取字符集的补集,即处理不在指定字符集中的字符。
  • -d 或 --delete:删除指定字符集中的字符。
  • -s 或 --squeeze-repeats:将连续的重复字符压缩为一个。
  • -t 或 --truncate-set1:将 SET1 截断为与 SET2 相同的长度。
tr [OPTION]... SET1 [SET2]

SET1:指定要转换或删除的字符集合。
SET2:指定用于替换 SET1 中字符的字符集合(如果提供)。如果 SET2 的长度小于 SET1,则 SET2 会被重复以匹配 SET1 的长度。如果 SET2 未提供,则 SET1 中的字符会被删除。

示例

  1. 将小写字母转换为大写字母:
echo "hello world" | tr 'a-z' 'A-Z'
  1. 删除文件中的数字:
echo "abc123def456" | tr -d '0-9'
  1. 将连续的空格压缩为一个空格:
echo "This   is    a   test." | tr -s ' '
  1. 使用补集删除所有非字母字符:
echo "Hello, World! 123" | tr -cd 'a-zA-Z'

输出:

HelloWorld

综合示例

echo "file1,txt:file2,txt:file3,txt" | tr ':,' '\n' | xargs -n 2 ls -l

输出结果

ls: cannot access 'file1.txt': No such file or directory
ls: cannot access 'file2.txt': No such file or directory
ls: cannot access 'file3.txt': No such file or directory

拆解

echo "file1,txt:file2,txt:file3,txt" | tr ':,' '\n'

file1.txt
file2.txt
file3.txt

  1. | tr ':,' '\n'

    管道符号|echo命令的输出作为tr命令的输入。tr命令是一个字符转换工具,这里它被用来将输入字符串中的:,替换为换行符\n。注意,虽然这里指定了两个要替换的字符(:,),但只给出了一个替换字符(\n),这意味着:,都会被替换为\n。因此,每个文件名(及其后面的,txt部分)都会被放在新的一行上。

 示例2

echo  "file1.txt:file2.txt,file3.txt;file4.txt" | tr ':,;' '\n'   |xargs ls -l
ls: cannot access 'file1.txt': No such file or directory
ls: cannot access 'file2.txt': No such file or directory
ls: cannot access 'file3.txt': No such file or directory
ls: cannot access 'file4.txt': No such file or directory

标签:字符,xargs,tr,命令,ls,linux,txt
From: https://www.cnblogs.com/yuezc/p/18543961

相关文章

  • Web服务器(Linux)
    www简介Web网络服务也叫WWW(WorldWideWeb全球信息广播)万维网服务,一般是指能够让用户通过浏览器访问到互联网中文档等资源的服务Web网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的Web服务器会通过HTTP(超......
  • Linux文件系统属性解读
    原文分享:https://bbs.deepin.org/post/281192一、ls-ihl 每一列的含义二、inode和block理解inode要从文件存储说起。文件存储在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector),每个扇区存储512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个扇区一个扇区地读取,这样效率太......
  • Linux CPU 拓扑结构之调度域 调度组 - 以8核ARM big.Little架构处理器为例
    CPU拓扑结构简介SMTLevel超线程处理器的一个核心MCLevel多核CPU的一个核心DIELevel一个物理CPU的晶片(注意不是package,package是封装好了的,肉眼看到的CPU处理器)(覆盖系统所有的CPU(CPU0~CPUN))cpu最小级别的就是超线程处理器的一个smt核,次小的一级就是一个多核cpu......
  • cmu15545-数据访问方式:B+树(B+Tree)
    目录基本概念基于磁盘的B+树查询与索引设计选择结点大小(NodeSize)合并阈值(MergeThredshold)变长键(Variable-lengthKeys)结点内部搜索(Intra-NodeSearch)优化手段PointerSwizzlingBε-treesBulkInsertPrefixCompressionDeduplicationSuffixTruncation基本概念基于磁盘的B+树......
  • Java String类
    publicclassDemoTest{publicstaticvoidmain(String[]args){/***String类型是不可变的:不可变对象,意味着一旦进行修改,就会产生新的对象*/Strings1="123";System.out.println(System.identityHashCode(s1));......
  • 2024 同一个网段,反弹shell四种方法【linux版本】bash、python、nc、villian反弹shell
    实验环境准备(同一个网段下,我是桥接的虚拟机)一、bash反弹shell二、python反弹shell三、nc反弹shell四、villain反弹shell实验环境准备(同一个网段下,我是桥接的虚拟机)      一台kali的linux(攻击者)        一台centos7/debian[另一个linux](受害者)一、b......
  • 『玩转Streamlit』--数据展示组件
    数据展示组件在Streamlit各类组件中占据了至关重要的地位,它的核心功能是以直观、易于理解的方式展示数据。本次介绍的数据展示组件st.dataframe和st.table,能够将复杂的数据集以表格、图表等形式清晰地呈现出来,使得用户能够快速把握数据的整体情况和细节特征。1.st.dataframes......
  • Foxit PDF Conversion SDK (C++, Linux ARM)-2.0.2
    FoxitPDFConversionSDKisaflexiblehigh-performancelibraryforconversionbetweenPDFfiles andMSOfficefileswhilemaintainingthelayoutandformatofyouroriginaldocuments.Itoffers advancedconversioncapabilitiesaswellasthesamequa......
  • 在 Windows 系统中,可以使用内置的命令行工具来分割和合并大文件,虽然没有专门的 split
    在Windows系统中,可以使用内置的命令行工具来分割和合并大文件,虽然没有专门的split命令(类似于Linux中的split命令),但可以通过一些其他方式实现这一功能。以下是一些常用方法:1.使用 fsutil 命令分割大文件fsutil是Windows提供的一个工具,可以用于管理文件系统,但并不直......
  • Linux之运维命令
    查看日志1、系统今日小于warning级别的日志manjournalctl|grep-C2"debug"|journalctl-xenall--sincetoday-pwarning[-ojson|-ojson-pretty]2、系统启动日志、内核日志#启动journalctl-b[-0]#内核journalctl-k3、指定服务或进程最新日志#......