假设我有一些命令的输出(比如ls -1):
a
b
c
d
e
...
我想依次对每一个应用一个命令(比如echo)。如。
echo a
echo b
echo c
echo d
echo e
...
在bash中最简单的方法是什么?
假设我有一些命令的输出(比如ls -1):
a
b
c
d
e
...
我想依次对每一个应用一个命令(比如echo)。如。
echo a
echo b
echo c
echo d
echo e
...
在bash中最简单的方法是什么?
当前回答
对我来说更好的结果是:
ls -1 | xargs -L1 -d "\n" CMD
其他回答
例如,我喜欢使用gawk在一个列表上运行多个命令
ls -l | gawk '{system("/path/to/cmd.sh "$1)}'
然而,可转义字符的转义可能会有点麻烦。
使用xargs可能是最简单的。在你的情况下:
ls -1 | xargs -L1 echo
-L标志确保正确读取输入。从xargs的手册页:
-L number
Call utility for every number non-empty lines read.
A line ending with a space continues to the next non-empty line. [...]
你可以在每一行上使用一个基本的前置操作:
ls -1 | while read line ; do echo $line ; done
或者你可以将输出管道到sed进行更复杂的操作:
ls -1 | sed 's/^\(.*\)$/echo \1/'
对我来说更好的结果是:
ls -1 | xargs -L1 -d "\n" CMD
您实际上可以使用sed来实现,前提是它是GNU sed。
... | sed 's/match/command \0/e'
工作原理:
用命令匹配替换匹配 关于替换执行命令 用命令输出替换被替换的行。