我是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
这是正确的命令吗?
如何在每个命令和结果后分隔输出?
Bash虽然循环不结束
非常复杂的带有大量引号的shellstring,如何处理escape
将variables拆分成多个variables
检查bash中的空string
您可以使用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的要求输出。
% 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] 举报,一经查实,本站将立刻删除。