首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bash:如何从输出中删除xargs产生的错误消息?

Bash:如何从输出中删除xargs产生的错误消息?
EN

Stack Overflow用户
提问于 2022-11-12 21:27:03
回答 1查看 73关注 0票数 1

我在这里有以下命令来查看文件,看看它们是否包含某个正则表达式:

find / -type f | xargs grep -ilIs <regex>

它似乎做了它应该做的事情(查看桌面上的每个文件以获得表达式),但理想情况下我不会显示此错误消息,因为它只是对上面命令找到的文件中不匹配的单引号进行注释:

xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option

我尝试使用sed来消除错误消息,但是在命令之后使用| sed '/xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option/d'并不会像我认为应该的那样删除它。我想知道你们中是否有人知道任何工具(当然,最好是最容易阅读和最少的打字),这些工具可以消除xargs错误消息。将-0作为参数不返回任何内容,只返回以下内容:

xargs: argument line too long

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-13 01:19:40

xargs有自己的转义语法,例如:

代码语言:javascript
运行
复制
$ echo 'file 1.txt' | xargs printf '<%s>\n'
<file>
<1.txt>
$ echo '"file 1.txt"' | xargs printf '<%s>\n'
<file 1.txt>

因此您不能为它提供原始文件,因为它们可以包含除NUL字节以外的任何字符。

为了解决这个问题,xargs的大多数实现都有允许处理NUL-delimited记录的-0开关,但是您需要在输入流中提供NUL字节:

代码语言:javascript
运行
复制
$ printf '%s\n' 'file 1.txt' 'file 2.txt' | xargs -0 printf '<%s>\n'
<file 1.txt
file 2.txt
>
$ printf '%s\0' 'file 1.txt' 'file 2.txt' | xargs -0 printf '<%s>\n'
<file 1.txt>
<file 2.txt>

最后,有三种方法可以正确地完成任务:

  1. find ... -print0 | xargs -0 grep ...

代码语言:javascript
运行
复制
find / -type f -print0 | xargs -0 grep -ilIs 'regex'

  1. find ... -exec grep ... {} +

代码语言:javascript
运行
复制
find / -type f -exec grep -ilIs 'regex' {} +

  1. grep -R ...

代码语言:javascript
运行
复制
grep -iRlIs 'regex' /
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74416714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档