Python one liner用于从文本中提取url

时间:2016-01-09 10:38:56

标签: python regex stdin

我的目标是编写一个用于从文本中提取URL的工作线程。问题是我甚至无法从STDIN读取数据。到目前为止我的实验:

└──> grep -i http: flashgot.log | python -c 'import sys; import re; for line in sys.stdin: print line'
  File "<string>", line 1
    import sys; import re; for line in sys.stdin: print line
                             ^
SyntaxError: invalid syntax


└──> grep -i http: flashgot.log | python -c 'import sys; import re; x = [print line for line in sys.stdin]'
  File "<string>", line 1
    import sys; import re; x = [print line for line in sys.stdin]
                                    ^
SyntaxError: invalid syntax

第二个计划是使用here here herehere

中的一些建议

1 个答案:

答案 0 :(得分:1)

我使用sys.stdout.write代替print

让您的代码段正常工作
grep -i http: flashgot.log | python -c 'import sys; import re; [sys.stdout.write("%s\n" % line) for line in sys.stdin]'

我认为问题不在于读取标准输入,而在于找到在一行上使用的正确语法。在尝试使用脚本时,看起来for在单行语法中不能用作块,在列表生成器中print也不行。

PS:在尝试单行功能时,我发现lambda有时会派上用场。您可能会在以后的脚本中发现它很有用