【141】Linux 中xargs、grep、print0和xargs -0用法

本文介绍了Linux中的xargs命令,用于将输入数据转换为命令行参数,并结合find使用。同时讲解了grep命令的多种用法,包括查找特定后缀和字符的行、递归查找、反向查找等。此外,详细阐述了find -print0和xargs -0的原理及其配合使用的场景,以避免空格和换行符导致的错误。
摘要由CSDN通过智能技术生成

内容目录(原文见公众号python宝)

一、xargs 介绍1.1 xargs 介绍 
1.2 读取输入数据重新格式化后输出
1.3 xargs 结合 find 使用二、grep 介绍2.1 grep 介绍 
2.2 查找并打印含有某后缀的并包含某字符的这一行
2.3 以递归的方式查找
2.4 反向查找
2.5 文件太大,无法直接使用cat时
2.6 grep多个过滤条件
2.7 grep 结合find使用三、find -print0和xargs -0原理及用法 3.1 find 基本用法
3.2 find -print0和xargs -0原理及用法

一、xargs 介绍

1.1 xargs 介绍 

  • xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。

  • xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。

  • xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。

  • xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。

  • xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。

之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令,例如:

find /sbin -perm +700 |ls -l       #这个命令是错误的
find /sbin -perm +700 |xargs ls -l   #这样才是正确的

# xargs 一般是和管道一起使用。命令格式:

somecommand |xargs -item  command
'''参数:

-a file 从文件中读入作为sdtin
-e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
-p 当每次执行一个argument的时候询问一次用户。
-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
-t 表示先打印命令,然后再执行。
-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
-r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。
-s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
-L num 从标准输入一次读取 num 行送给 command 命令。
-l 同 -L。
-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
-x exit的意思,主要是配合-s使用。。
-P 修改最大的进程数,默认是1,为0时候为as many as it can ,这个例子我没有想到,应该平时都用不到的吧。
'''

1.2 读取输入数据重新格式化后输出

1.3 xargs 结合 find 使用

# 用 rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用 xargs 去避免这个问题:
find . -type f -name "*.log" -print0 | xargs -0 rm -f


# xargs -0 将 \
xargs grepgrep在使用上有一些差别。 grep命令用于在文件查找指定的字符串并显示匹配的行。例如,可以使用grep -r 'copy' ./ -n命令在当前目录及其子目录查找包含'copy'字符串的行,并显示行号。 而xargs grep命令则是将grep命令与xargs命令结合使用。xargs命令用于将标准输入数据转换成命令行参数,将多个参数传递给其他命令。通过使用xargs命令,可以实现对find命令等产生的结果集进行操作。例如,可以使用find命令查找符合条件的文件,并使用xargs grep命令在这些文件查找指定的字符串。 另外,xargs命令还有一个缺陷,即默认使用空格作为参数的分隔符。这就意味着,如果文件名包含空格,xargs命令可能无法正确处理。为了解决这个问题,可以使用-print0选项来指定以null作为分隔符,与-print0选项配合使用的xargs命令在处理文件名时会更可靠。 因此,总结起来,xargs grep命令是通过结合xargs命令和grep命令来实现对文件指定字符串的查找,而grep命令则是直接在文件查找指定的字符串。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [linux系统编程笔记05——grepxargs](https://blog.csdn.net/demon_xi/article/details/109271054)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值