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

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

我正在使用下面的bash脚本。 但它不工作。

样机sh文件:

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

并在运行时使用下面的命令

 $ ./Mockup.sh > output.txt 

这是正确的命令吗?

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

如何在每个命令和结果后分隔输出?

Solutions Collecting From Web of "UNIX shell脚本,用于从文件运行grep命令列表并获取单个分隔文件的结果"

我怎样才能得到输出文件中的grep命令和输出

您可以使用bash -v (verbose)在stderr 执行之前打印每个命令 ,它的输出将像往常一样在stdout上可用:

 bash -v ./Mockup.sh > output.txt 2>&1 cat output.txt 

工作演示

一个合适的shell脚本可以

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

只要你在脚本调用时传递的文件名是“很好的”,那就是它们中没有空格。 编辑使用"$@"扩展来处理文件名中的通用空格,tx将他/她的注释三重化 )

这种调用(根据\|语法使用替代匹配字符串)具有附加的优点,即在最终列表中只有一个文件名出现,因为一旦找到第一个文件名, grep -l打印一次文件名在文件中出现三个字符串之一。


关于"$@"附录

 % ff () { for i in "$@" ; do printf "[%s]\n" "$i" ; done ; } % # NB "asd" below is indeed "a SPACE s TAB d" % ff "asd" " ert " '345 345' [asd] [ ert ] [345 345] % 
 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的要求输出。

另一种效率较低的方法试图解决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的输出,可以预见搜索字符串和/或包含冒号的文件名的问题…哦,那是另一个Q也许