【发布时间】:2011-02-08 15:58:19
【问题描述】:
在 bash 命令行中,如果我运行“find . -name 'abc*'”,它会打印出一个文件名列表,例如
abc1
abc2
abc3
如何使用 echo 或其他命令对其进行管道传输,以便获得以下输出:
abc1 ok
abc2 ok
abc3 ok
【问题讨论】:
在 bash 命令行中,如果我运行“find . -name 'abc*'”,它会打印出一个文件名列表,例如
abc1
abc2
abc3
如何使用 echo 或其他命令对其进行管道传输,以便获得以下输出:
abc1 ok
abc2 ok
abc3 ok
【问题讨论】:
find . -name 'abc*' | sed 's/$/\tok/' | column -t
sed 将字符串 <Tab>ok 附加到每一行,column 很好地格式化输出(如果你不需要它,你可以跳过它)。
【讨论】:
我倾向于写作:
whatever | while read line; do echo $line ok; done
对于这么简单的事情来说,这可能有点过头了,但如果你想用这条线做更复杂的事情,它就会成为最简单的事情。而且它不涉及记住如何使 sed 工作!
【讨论】:
使用 GNU 查找,
find . -name "abc*" -printf "%f ok\n"
【讨论】:
简单地说:
$ find . -name 'abc*' | xargs -I {} echo {} OK
【讨论】:
通过 sed 管道,是一种方式:
| sed -e 's/\(^.*\)/\1 ok/'
【讨论】:
你可以使用xargs:
find -iname "abc" | xargs -IREPL echo REPL ok
【讨论】:
查看paste 标准命令。或者对于 find 的每个元素,您应该手动回显文件名和该文件名上函数的结果。
你能告诉你你最终想做什么吗?
【讨论】:
使用这样的东西:
find . -name "abc*" -exec echo "{} - ok" \;
【讨论】:
find . -name 'abc*' -exec echo {}' OK' \; | column -t
【讨论】: