以下命令正常工作,并为我提供了包含内容中某些文字的文件列表 -
grep -rl "Text in content" .
以下命令也可以正常工作,并为我提供文件名中包含两个文本段的所有文件的列表 -
ls -lrth | grep "profiling" | grep "20170714_07"
所以,我试图将第二秒的输出输出到第一个命令的输入 -
ls -lrth | grep "profiling" | grep "20170714_07" | grep -rl "aerospike" .
但是,我在输出中也得到以下文件,它不包含“profiling”和“20170714_07” -
./aero_debug_10_20170714.log
请帮助,我是grep的新手。
答案 0 :(得分:0)
要使用单个命令执行此操作,您需要的不仅仅是grep
。如果您在提供xargs
命令的Unix环境中,则可以执行以下操作:
ls -1 | grep "profiling" | grep "20170714_07" | xargs grep "aerospike"
xargs
获取文件名列表(每行一个,这就是ls
命令更改为ls -1
的原因,grep "aerospace"
仅列出该表单中的文件名),然后执行每个文件后面的命令(在本例中为find
)。
注意:如果文件名中包含空格,您可以考虑使用其他命令来解决问题:find . -name "*profiling*20170714_07*" -print0 | xargs -0 grep "aerospike"
,命令行类似于以下内容:
-name
(唯一的问题是,这不会找到日期字符串首先在文件名中的文件名,但您可以使用find
命令中的另一个try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
return dateFormat.format(new Date()); // Find todays date
} catch (Exception e) {
e.printStackTrace();
return null;
}
选项来搜索那些需要)。