使用xargs grep多种模式

用户394

我有一个文件,其中包含我要grep的字词,每个字词是文件中的一行。我以为我可以用xargs做到这一点。我可以从这样的手册页中的示例中收集到什么

find ./work -print0 | xargs -0 rm

xargs将pre-pipe命令的输出附加到其参数的末尾。因此,如果发现返回report.doc,则xargs将构造rm report.doc这种理解正确吗?

因此,由于我希望文件中的值位于grep命令的中间,因此需要指定一个占位符。在游戏中,我尝试了{},但没有成功:

$> cat strings.txt | xargs grep {} subdirectory/*
grep: string1: No such file or directory
grep: string2: No such file or directory

xargs是正确的工具吗?如果是这样,语法是什么?

凯文

是的,find ./work -print0 | xargs -0 rm将执行类似的操作rm ./work/a "work/b c" ...您可以使用进行检查echofind ./work -print0 | xargs -0 echo rm将打印将要执行的命令(空格将被适当地转义,尽管echo不会显示出来)。

为了xargs将名称放在中间,您需要添加-I[string],在哪里[string]要用参数替换,在这种情况下,您将使用-I{},例如<strings.txt xargs -I{} grep {} directory/*

您实际要使用的是grep -F -f strings.txt

-F, --fixed-strings
  Interpret PATTERN as a  list  of  fixed  strings,  separated  by
  newlines,  any  of  which is to be matched.  (-F is specified by
  POSIX.)
-f FILE, --file=FILE
  Obtain  patterns  from  FILE,  one  per  line.   The  empty file
  contains zero patterns, and therefore matches nothing.   (-f  is
  specified by POSIX.)

因此,grep -Ff strings.txt subdirectory/*将找到所有出现的字符串strings.txt作为文字,如果您删除该-F选项,则可以在文件中使用正则表达式。您实际上grep -F "$(<strings.txt)" directory/*可以使用如果您想练习find,可以使用摘要中的最后两个示例。如果您想进行递归搜索而不是仅仅进行一级搜索,那么在摘要中也有一些选择。

概括:

# grep for each string individually.
<strings.txt xargs -I{} grep {} directory/*

# grep once for everything
grep -Ff strings.txt subdirectory/*
grep -F "$(<strings.txt)" directory/*

# Same, using file
find subdirectory -maxdepth 1 -type f -exec grep -Ff strings.txt {} +
find subdirectory -maxdepth 1 -type f -print0 | xargs -0 grep -Ff strings.txt

# Recursively
grep -rFf strings.txt subdirectory
find subdirectory -type f -exec grep -Ff strings.txt {} +
find subdirectory -type f -print0 | xargs -0 grep -Ff strings.txt

-l如果您不需要查看实际的行,则可能希望使用该选项仅获取每个匹配文件的名称:

-l, --files-with-matches
  Suppress  normal  output;  instead  print the name of each input
  file from which output would normally have  been  printed.   The
  scanning  will  stop  on  the  first match.  (-l is specified by
  POSIX.)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用grep的多种排除模式

来自分类Dev

Grep在命令上使用了多种模式

来自分类Dev

使用“?”模式的grep操作

来自分类Dev

使用grep匹配模式\\\“

来自分类Dev

简单使用“ tail”和“ grep”。多种条件

来自分类Dev

如何使用xargs传递grep要搜索的名称列表?

来自分类Dev

为什么xargs使用-t启用详细模式?

来自分类Dev

如何在awk中使用多种模式?

来自分类Dev

文件中提供了多种模式的grep

来自分类Dev

使用grep排除箭头模式“->”

来自分类Dev

使用grep检测行尾的模式

来自分类Dev

如何使用grep搜索模式?

来自分类Dev

grep用于多种模式,每种模式都有选项

来自分类Dev

Grep多种模式和打印模式及其前几行

来自分类Dev

“ xargs grep”做什么?

来自分类Dev

“ xargs grep”做什么?

来自分类Dev

使用多种匹配模式对字符串列进行标记/分类

来自分类Dev

使用一个命令删除多种模式的文件(查找)

来自分类Dev

使用-Replace具有多种模式来重命名项目

来自分类Dev

使用多种搜索模式获取目录中的文件

来自分类Dev

使用find命令从文件中搜索多种模式

来自分类Dev

如何使用多种模式加密 4 位数字?

来自分类Dev

如何使用find + grep + sed + xargs或其他方式大量重命名文件

来自分类Dev

使用 grep/xargs 获取需求文件 (PIP) 中以 ">=" 列出的版本的当前安装版本的命令

来自分类Dev

用于 shell 脚本中的行的 grep,使用 $1 设置发送到 xargs

来自分类Dev

grep具有不同上下文的多种模式

来自分类Dev

grep具有针对多种模式的单独选项

来自分类Dev

如何使用grep排除多个模式

来自分类Dev

R:使用grep / gsub查找重复的模式

Related 相关文章

热门标签

归档