如何在一个文件中grep并为每个匹配执行一条命令?如何grep和执行命令(对于每一个匹配)
文件:
foo
bar
42
foo
bar
我想执行执行例如date
为每场比赛上foo
。
以下try不起作用:
grep file foo | date %s.%N
如何做到这一点?
如何在一个文件中grep并为每个匹配执行一条命令?如何grep和执行命令(对于每一个匹配)
文件:
foo
bar
42
foo
bar
我想执行执行例如date
为每场比赛上foo
。
以下try不起作用:
grep file foo | date %s.%N
如何做到这一点?
grep file foo | while read line ; do echo "$line" | date %s.%N ; done
更多可读中的脚本:
grep file foo | while read line
do
echo "$line" | date %s.%N
done
对于输入的每一行,read
将把值入变量$line
,并且while
语句将执行do
和done
之间的环体。由于该值现在是一个变量,而不是标准输入,因此我使用echo
将其推回到标准输入,但您可以仅执行date %s.%N "$line"
,假定日期以此方式工作。
避免使用for line in `grep file foo`
这是类似的,因为for
老是打断的空间,这成为读取文件的列表一场噩梦:
find . -iname "*blah*.dat" | while read filename; do ....
会失败for
。
你真正需要的是一个xargs命令。匹配的一些文件,并在Cygwin环境
$ find $(pwd) -type f -exec ls -1 {} \; | grep '\(_en\|_es\|_zh\)\.\(path\)$' | xargs cygpath -w
grep command_string file | sh -
嗨@詹姆斯,欢迎来到SO,这是一个好主意,可以添加一些解释,这将改善答案,并且更有可能获得投票。 –
没问题转化火柴完整的Windows路径的http://en.wikipedia.org/wiki/Xargs
例子。大多数批量任务都有unix工具,其中包括grep从文件读取多个模式的能力(-f),或者xargs从stdin构建命令的能力。 –
如果不是这种: grep的foo的文件 ------- NAME 的grep,egrep的,fgrep一样,rgrep - 打印线的图案匹配 概要 的grep [OPTIONS] PATTERN [FILE .. 。] – Xofo
我该如何执行脚本: grep file foo |而读行 做 echo“$ line”|日期%s。%N 完成 我需要输入文件吗? –