UNIX shell脚本,用于从文件运行grep命令列表并在单个分隔文件中获取结果

时间:2014-11-05 12:51:25

标签: linux bash unix grep

我是unix编程的初学者,也是自动化工作的一种方式 我想运行一个列表一个grep命令,并在单个分隔文件中获取所有grep命令的输出。

我正在使用以下bash脚本。但它没有用。

样机sh文件:

!/bin/sh
grep -l abcd123
grep -l abcd124
grep -l abcd125

并且在运行时我使用了以下命令

$ ./Mockup.sh > output.txt

这是正确的命令吗?

如何在输出文件中同时获取grep命令和输出?

如何在每个命令和结果后界定输出?

4 个答案:

答案 0 :(得分:1)

  

如何在输出文件中同时获取grep命令和输出

你可以在bash -v上使用stderr(详细)在执行前打印每个命令,并且它的输出将照常在{{1 }}:

stdout

Working Demo

答案 1 :(得分:1)

合适的shell脚本可以是

#!/bin/sh
grep -l 'abcd123\|abcd124\|abcd125' "$@"

,前提是您在脚本调用时传递的文件名“表现良好”,其中没有空格。编辑使用{{1}扩展处理文件名中的通用空格,tx到triplee用于他/她的评论)

这种调用(根据"$@"语法使用备用匹配字符串)具有额外的优势,即在最终列表中只出现一次文件名,因为\|打印一次filename,一旦找到文件中三个字符串之一的第一个匹配项,就立即生成。


关于grep -l

的附录
"$@"

答案 2 :(得分:0)

cat myscript.sh 
########################
#!/bin/bash
echo "Trying to find the file contenting the below string, relace your string with below string"
grep "string" /path/to/folder/* -R -l
########################

保存上面的文件并按以下方式运行

sh myscript.sh > output.txt 

命令prmpt返回后,您可以检查output.txt是否需要输出。

答案 3 :(得分:0)

尝试解决OP问题的另一种效率较低的方法

  

如何在输出文件中同时获取grep命令和输出?

% cat Mockup
#!/bin/sh
grep -o -e string1 -e string2 -e string3 "$@" 2> /dev/null | sort -t: -k2  | uniq

输出:(也被模拟)

% sh Mockup file{01..99}
file01:string1
file17:string1
file44:string1
file33:string2
file44:string2
file48:string2
% 

查看消费者POV的输出,可以预见搜索字符串和/或包含冒号的文件名的问题...哦,那可能是另一个问题