我是unix编程的初学者,也是自动化工作的一种方式 我想运行一个列表一个grep命令,并在单个分隔文件中获取所有grep命令的输出。
我正在使用以下bash脚本。但它没有用。
样机sh文件:
!/bin/sh
grep -l abcd123
grep -l abcd124
grep -l abcd125
并且在运行时我使用了以下命令
$ ./Mockup.sh > output.txt
这是正确的命令吗?
如何在输出文件中同时获取grep命令和输出?
如何在每个命令和结果后界定输出?
答案 0 :(得分:1)
答案 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的输出,可以预见搜索字符串和/或包含冒号的文件名的问题...哦,那可能是另一个问题