shell OS X Bash脚本

c6ubokkw  于 2023-03-19  发布在  Shell
关注(0)|答案(2)|浏览(187)

我不太会编写shell脚本,但我想从本质上做到这一点:
1.运行命令“grunt check”大约30次(该过程需要60秒)。
1.在这个命令的输出上做一个正则表达式,“一些随机错误消息,失败”,其中“失败”是我要搜索的东西,但我想捕获整个句子。
1.将关联行写入文件。

#!/bin/bash

COUNTER=0
while [  $COUNTER -lt 30 ]; do
    command grunt check
    // ERROR = regex(/\/Failed./)
    // WRITE ERROR TO FILE
    let COUNTER=COUNTER+1
done
rjzwgtxy

rjzwgtxy1#

for ((cr=0; cr<30; cr++))
do
   grunt check | grep Failed
done > outfile.txt
hpcdzsge

hpcdzsge2#

counter=0
while [  $counter -lt 30 ]; do
    grunt check | grep Failed
    let counter=counter+1 
done > some file

上面的代码使用管道捕获grunt命令的输出并将其发送到grepgrep搜索输出并打印包含单词Failed的任何行。然后将任何这样的行发送到名为somefile的文件。
作为一个小问题,我已经将COUNTER转换为小写。这是因为系统使用大写的环境变量。如果你习惯使用小写的环境变量,那么你就不会意外地覆盖一个。(在这个特殊的例子中,没有名为COUNTER的系统变量,所以你是安全的。)

数到30的另一种方法:

您可能会发现这更简单:

for counter in {1..30}; do
    grunt check | grep Failed
done > somefile

{1..30}表示法提供了从1到30的数字,它是一个bash特性,所以不要尝试在基本的POSIX shell上使用它。

获取更多上下文

如果您想查看错误消息的更多上下文,grep提供了几个选项。要查看匹配“Failed”的行和前面的行,请使用-B

for counter in {1..30}; do
    grunt check | grep -B 1 Failed
done >somefile

同样,-A可用于显示匹配后的行。-C将显示匹配前后的行。

相关问题