在python或bash循环中运行linux cat命令

时间:2015-08-25 15:32:10

标签: python linux bash shell

我在目录中有999,999个文件:

member.php\?1

member.php\?2

...

member.php\?99999

我想在特定文件的bash或python循环中运行以下cat命令。此命令应该从.php文件中提取用户名,但由于涉及大量文件而无法工作。

root@alimp5: cat member.php\?* | grep -i '<li class="navbit lastnavbit"><span>' | cut -d'>' -f3 | cut -d'<' -f1  >> users.txt

我的解决方案(这种方式可以正常工作):在每个文件上逐步执行cat命令,如下所示:

root@alimp5:cat member.php\?1* | grep -i '<li class="navbit lastnavbit"><span>' | cut -d'>' -f3 | cut -d'<' -f1  >> users.txt

root@alimp5:cat member.php\?2* | grep -i '<li class="navbit lastnavbit"><span>' | cut -d'>' -f3 | cut -d'<' -f1  >> users.txt

...

root@alimp5:cat member.php\?9* | grep -i '<li class="navbit lastnavbit"><span>' | cut -d'>' -f3 | cut -d'<' -f1  >> users.txt

我希望通过在python循环或bash循环中运行它来自动执行上述解决方案。

例如(没有工作):

import os, sys

for count in range(1,10):
  os.system('''cat member.php\?%d* | grep -i '<li class="navbit lastnavbit"><span>' | cut -d'>' -f3 | cut -d'<' -f1  >> users.txt''') %count

这样做的好方法是什么?

3 个答案:

答案 0 :(得分:2)

#!/bin/bash
for i in {1...9999999}
do
   $i 
done

现在你只需在你假装的命令旁边添加$ i

'cat member.php\?$i

答案 1 :(得分:1)

在你的python命令中,你做错了,% count应该在os.system()调用中。示例 -

os.system('''cat member.php\?%d* | grep -i '<li class="navbit lastnavbit"><span>' | cut -d'>' -f3 | cut -d'<' -f1  >> users.txt''' % count)

此外,你应该迭代到你想要的数量。

答案 2 :(得分:0)

在Python中,我会使用glob来扫描目录,以防文件数量发生变化。

import glob
for file in glob.glob('member*'):
   process(file)

其中process是处理作为参数给出的文件的函数。

另外,请注意,如果您的php文件实际上是用HTML填充的,则可以使用BeautifulSoup来完成工作。

在bash中,我会使用find

find . -name member\*; -exec sh -c "grep -i '<li class=\"navbit lastnavbit\"><span>' | cut -d'>' -f3 | cut -d'<' -f1  >> users.txt"

或只是

for file in member*; do 
  grep -i '<li class=\"navbit lastnavbit\"><span>' ${file} | cut -d'>' -f3 | cut -d'<' -f1  >> users.txt
done