假设我有一些命令的输出(例如ls -1
):
a
b
c
d
e
...
Run Code Online (Sandbox Code Playgroud)
我想echo
依次对每个命令应用一个命令(比如说).例如
echo a
echo b
echo c
echo d
echo e
...
Run Code Online (Sandbox Code Playgroud)
在bash中最简单的方法是什么?
Mic*_*zek 198
这可能是最容易使用的xargs
.在你的情况下:
ls -1 | xargs -L1 echo
Run Code Online (Sandbox Code Playgroud)
Tre*_*ner 150
您可以在每一行上使用基本的前置操作:
ls -1 | while read line ; do echo $line ; done
Run Code Online (Sandbox Code Playgroud)
或者您可以将输出传递给sed以进行更复杂的操作:
ls -1 | sed 's/^\(.*\)$/echo \1/'
Run Code Online (Sandbox Code Playgroud)
bal*_*ton 12
适用于包含空格的文件名的解决方案是:
ls -1 | xargs -I %s echo %s
Run Code Online (Sandbox Code Playgroud)
以下内容是等效的,但在前体和您实际想要做的事情之间有更清晰的划分:
ls -1 | xargs -I %s -- echo %s
Run Code Online (Sandbox Code Playgroud)
哪里echo
是你要运行的东西,后面%s
是文件名。
你实际上可以使用sed来做它,只要它是GNU sed.
... | sed 's/match/command \0/e'
Run Code Online (Sandbox Code Playgroud)
这个怎么运作:
for s in `cmd`; do echo $s; done
Run Code Online (Sandbox Code Playgroud)
如果cmd具有较大的输出:
cmd | xargs -L1 echo
Run Code Online (Sandbox Code Playgroud)