2012-11-15 40 views

回答

24
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语句将执行dodone之间的环体。由于该值现在是一个变量,而不是标准输入,因此我使用echo将其推回到标准输入,但您可以仅执行date %s.%N "$line",假定日期以此方式工作。

避免使用for line in `grep file foo`这是类似的,因为for老是打断的空间,这成为读取文件的列表一场噩梦:

find . -iname "*blah*.dat" | while read filename; do .... 

会失败for

+0

没问题转化火柴完整的Windows路径的http://en.wikipedia.org/wiki/Xargs

grep file foo | xargs date %s.%N 

例子。大多数批量任务都有unix工具,其中包括grep从文件读取多个模式的能力(-f),或者xargs从stdin构建命令的能力。 –

+0

如果不是这种: grep的foo的文件 ------- NAME 的grep,egrep的,fgrep一样,rgrep - 打印线的图案匹配 概要 的grep [OPTIONS] PATTERN [FILE .. 。] – Xofo

+0

我该如何执行脚本: grep file foo |而读行 做 echo“$ line”|日期%s。%N 完成 我需要输入文件吗? –

7

你真正需要的是一个xargs命令。匹配的一些文件,并在Cygwin环境

$ find $(pwd) -type f -exec ls -1 {} \; | grep '\(_en\|_es\|_zh\)\.\(path\)$' | xargs cygpath -w 
0
grep command_string file | sh - 
+0

嗨@詹姆斯,欢迎来到SO,这是一个好主意,可以添加一些解释,这将改善答案,并且更有可能获得投票。 –

相关问题