bash脚本中的grep无法正常工作

吉姆卡茨

我知道互联网上也有许多类似的问题,但是我找不到针对我特定问题的解决方案。

我为任务分配了此脚本,我想在其中查找哪些组合在HTML中返回UNLOCKED作为结果。

#!/bin/bash
for ((x4=0;x4<=4;x4++)); do
  for ((x3=0;x3<=4;x3++)); do
    for ((x2=0;x2<=4;x2++)); do
      for ((x1=0;x1<=4;x1++)); do
echo $x1 $x2 $x3 $x4
eval curl http://www.artemiosv.info/21.php?p1=$x1;p2=$x2;p3=$x3;p4=$x4
  | grep -oP '<BODY>*[\s\S]*</BODY>'
done
done
done
done

在将脚本的输出重定向到文件中之后,它返回的结果的第一行是:

0 0 0 0
<HTML><BODY>LOCKED</BODY></HTML>1 0 0 0
<HTML><BODY>LOCKED</BODY></HTML>2 0 0 0
<HTML><BODY>LOCKED</BODY></HTML>3 0 0 0

从HTML代码(这是curl命令的实际结果),在那些行被锁定的情况下,我只想要主要文本。但是我使用的正则表达式似乎无法正常工作,而在脚本外部测试相同模式可以正常工作。HTML的预期结果应该是“锁定”,“解锁”,我认为您发现了这个秘密。

为什么grep在脚本内部和外部都可以正常运行此问题?我该如何解决?

芒登

您只需要更改正则表达式即可排除HTML标记。由于您使用的是Perl兼容的正则表达式,因此可以使用\K“表示丢弃到目前为止所有匹配的内容|”。放弃了<BODY>积极向前放弃了</BODY>您还可以使用大括号扩展代替繁琐的for((var=0;var<=lim;var++))语法:

for x4 in {0..4}; do
  for x3 in {0..4}; do
    for x2 in {0..4}; do
      for x1 in {0..4}; do
        curl "http://www.artemiosv.info/21.php?p1=$x1;p2=$x2;p3=$x3;p4=$x4" 2>/dev/null |
            grep -oP '<BODY>\K[\s\S]*(?=</BODY>)'
      done
    done
  done
done

或者,如果您既需要HTML内容,又需要4个变量的值,请使用以下命令:

for x4 in {0..4}; do
 for x3 in {0..4}; do
  for x2 in {0..4}; do
   for x1 in {0..4}; do
     printf '%s : %s\n' "$x1 $x2 $x3 $x4" \
        "$(curl "http://www.artemiosv.info/21.php?p1=$x1;p2=$x2;p3=$x3;p4=$x4" 2>/dev/null |
           grep -oP '<BODY>\K[\s\S]*(?=</BODY>)')"
   done
  done
done

完毕

请注意,我也删除了,eval因为这没有做任何有用的事情。您只需要重定向stderr。

最后,您还可以将curl命令发送到后台,以便可以并行运行许多命令。这些命令不是很繁琐,因此您的计算机应该能够处理这些命令,它将大大加快脚本的速度。只需&在行末添加printf ...

printf '%s : %s\n' "$x1 $x2 $x3 $x4" \
        "$(curl "http://www.artemiosv.info/21.php?p1=$x1;p2=$x2;p3=$x3;p4=$x4" 2>/dev/null |
            grep -oP '<BODY>\K[\s\S]*(?=</BODY>)')" &

但是请注意,您尝试从中下载的站点似乎无法处理多个连续的请求。即使不并行运行,某些请求也返回空(如果手动运行,则工作),并且并行运行时,空结果的数量也会成倍增加。您可能想与您的老师谈谈解决此问题的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Bash脚本-if和grep无法正常工作

来自分类Dev

在bash脚本中,Sendmail无法正常工作

来自分类Dev

bash脚本中的pgrep无法正常工作

来自分类Dev

在bash脚本中,Sendmail无法正常工作

来自分类Dev

期望在我的Bash脚本中无法正常工作

来自分类Dev

bash脚本中的scp命令无法正常工作

来自分类Dev

Bash脚本-嵌套$(..)命令-无法正常工作

来自分类Dev

Bash脚本查找/ SED无法正常工作

来自分类Dev

bash脚本无法正常工作

来自分类Dev

Bash脚本无法正常工作

来自分类Dev

命令在Shell脚本中无法正常工作

来自分类Dev

sh脚本中的mysqldump无法正常工作

来自分类Dev

在我的bash脚本中可能“循环”和“输出”可能无法正常工作

来自分类Dev

bash中的awk无法正常工作

来自分类Dev

Unix Bash脚本导致git clone无法正常工作

来自分类Dev

通过SSH远程触发的Bash脚本无法正常工作

来自分类Dev

Bash脚本cd即使存在也无法正常工作

来自分类Dev

Bash 简单脚本无法正常工作

来自分类Dev

Bash IF无法正常工作

来自分类Dev

grep中的--exclude-dir选项无法正常工作

来自分类Dev

脚本sendNotification无法正常工作

来自分类Dev

脚本无法正常工作

来自分类Dev

Shell脚本中的输出重定向无法完全正常工作

来自分类Dev

批处理脚本中的FTP命令无法正常工作

来自分类Dev

日期比较在Shell脚本中无法正常工作

来自分类Dev

方法“ moveActiveSheet”在Google Apps脚本(JavaScript)中无法正常工作

来自分类Dev

转到在批处理脚本中无法正常工作

来自分类Dev

Crontab中的Shell脚本无法正常工作

来自分类Dev

Automator中的Shell脚本无法正常工作