微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我是unix编程的初学者,也是自动化工作的一种方式

我想运行一个grep命令列表,并在单个分隔文件获取所有grep命令的输出

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

样机sh文件

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

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

在bash中连接到Ubunut中的VPN连接

如何在令人敬畏的WM上使用快捷方式运行bash

在bash中search文件中的单词,如果单词存在,则执行某些操作

保持耙子工作运行

从脚本获取要安装的软件包列表?

$ ./Mockup.sh > output.txt

这是正确的命令吗?

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

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

Bash虽然循环不结束

非常复杂的带有大量引号的shellstring,如何处理escape

将variables拆分成多个variables

如何添加一个bash别名到.bashrc接受一个参数?

检查bash中的空string

我怎样才能得到输出文件中的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也许

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐