linux - 如何表达 "map a linux command to each line in a file"?

标签 linux awk

我经常需要删除所有不在特定 svn 源代码树中的文件。要获取所有文件名的列表,我使用:

svn st | grep ^? | awk '{print $2}'

这个命令会给我一个文件名列表,每行一个名字。那我要怎么表达呢

for (each line in ${svn st | grep ^? | awk '{print $2}' )
    rm -f line

?

最佳答案

使用 xargs:

svn st | grep '^?' | awk '{print $2}' | xargs rm -rf

注意:在您的命令中,由于 {print $2},您不会处理包含空格的文件。您还必须小心使用 xargs,因为它会将输入拆分为空格。因此,如果文件名中有空格,使用 -0 选项会更安全。

这是一个更正确的 xargs 用法示例:

find -type f| tr \\n \\0 | xargs -0 wc

或者,使用 find -print0 选项:

find -type f -print0 | xargs -0 wc 

xargs 是最强大的 UNIX 工具之一。我每天都用它。

关于linux - 如何表达 "map a linux command to each line in a file"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3789990/

相关文章:

php - 使用 crontab 执行 PHP 脚本时出错

regex - 递归列出包含 m of n 正则表达式的文件

linux - 使用 sed 在特定行之后追加 HTML 代码块

bash - awk 替换 shell 变量

shell - 使用 AWK 递增数字

linux - 为什么wget引发错误403:禁止的错误?

linux - 使用 Apache httpd.conf 文件的 Docker 卷权限

c++ - 如何在Linux的QTCreator中用dlopen打开的共享库中设置断点

linux - 根据具有有限列的第二个列表的内容编辑一个列表的内容