将 grep 输出提供给 rm

Cod*_*ner 53 grep bash rm

我正在尝试将grep输出通过管道传输到rm,但它输出了无用的东西。是否需要任何开关rm?或者可以rm直接提供正则表达式?

ls | grep '^\[Daruchini'| rm
Run Code Online (Sandbox Code Playgroud)

rm: 缺少操作数 尝试 `rm --help' 了解更多信息。

gee*_*aur 67

您需要使用xargs将标准输入转换为rm.

$ ls | grep '^Dar' | xargs rm
Run Code Online (Sandbox Code Playgroud)

(注意文件名中的特殊字符;使用 GNU grep,您可能更喜欢

$ ls | grep -Z '^Dar' | xargs -0 rm
Run Code Online (Sandbox Code Playgroud)

)

此外,虽然 shell 不使用正则表达式,但这是一个简单的模式:

$ rm Dar*
Run Code Online (Sandbox Code Playgroud)

(同时,我想我需要更多的睡眠。)

  • 假设提问者在 (s) 发布问题时没有犯错,(s) 他在追求 `rm Dar*`,而不是 `rm !(Dar*)`。 (2认同)
  • +1 很好的答案,我必须添加`| `xargs` 位之前的 tr "\n" "\0"`。在这篇文章中看到:http://stackoverflow.com/questions/20307299/linux-why-cant-i-pipe-find-result-to-rm (2认同)

Gil*_*il' 5

不要解析ls.

在这里,让 shell 过滤你想要的文件非常简单。请注意,扩展 pattern 的是 shell Dar*,而不是rm命令。shell 执行的模式扩展称为globbing

rm Dar*
Run Code Online (Sandbox Code Playgroud)

在更复杂的情况下,查找find命令。


Mit*_*tms 5

为了将输出作为参数传递,我倾向于使用 while 循环,因为我不熟悉 xargs。

ls | grep '^Dar' | while read line; do rm "$line";done;
Run Code Online (Sandbox Code Playgroud)