2016-07-28 19 views
-1

我有一个python脚本,它从pastebin.com/archive中提取URL,它具有粘贴链接(它在url中的pastbin.com后有8个随机数字)。我当前的输出是一个.txt文件,其中包含下面的数据,我只希望粘贴链接(例如:http://pastebin.com///Y5JhyKQT),而不是指向其他页面(如pastebin.com/tools)的链接。这是我可以设置wget去拉每个单独的粘贴。提取具有特定字符数的行

我可以考虑这样做的唯一方法是编写一个bash脚本来计算每行中的字符数,并且只保留包含30个字符的行(这是链接到粘贴的URL的长度)。

我不知道如何使用grep或awk来实现类似这样的事情,也许使用while while循环?任何帮助,将不胜感激!

http://pastebin.com///tools 
http://pastebin.com//top.location.href 
http://pastebin.com///trends 
http://pastebin.com///Y5JhyKQT <<< I want to keep this 
http://pastebin.com//= 
http://pastebin.com///> 
+0

你可以在Python中轻松完成,所以你不必得到噪声,然后用wget检查它。看到我的答案python下面。如果超过长度,则不要写入文件。 –

+1

你说你想保留的行在'Y5JhyKQT'结尾,所以在末尾没有'8个随机数字',所以我假设你的意思是'8个随机字母数字字符。那么,如果以“潮流”而不是“趋势”为代表的8个字符的单词结尾,那么您如何区分那些在“趋势”之前不需要的行?或者,这只是一个完全不相干的红鲱鱼你扔在那里,所有真正重要的是行长是30个字符? –

回答

0
#!/usr/bin/env zsh 
while read aline 
do 
    if [[ ${#aline} == 30 ]]; then                                       
     #do something 
    fi 
done 

这在bash man pages “参数扩展” 部分下记录。

EDIT =此溶液是zsh的仅

+2

不要这样做。请参阅[为什么要使用shell循环处理文本被认为是坏习惯](http://unix.stackexchange.com/questions/169716/why-is-using-a-shell -loop到过程文本视为坏实践)。 –

+0

哎呀,我想我一直在使用zsh的时间太长了 –

+0

在zsh中几乎所有相同的问题仍然是错误的方法。一个shell是一个环境,通过它可以用一种语言来调用工具来排序这些调用,但它不是一个操纵文本的工具。 –

1

从您发布它看起来像所有你需要的是样本:

grep -E '/[[:alnum:]]{8}$' file 

或可能:

grep -E '^.{30}$' file 

如果不为你工作,说明原因,并提供一个更好的样本。

+0

为什么不'awk'length()== 30''?这将工作,没有正则表达式,它很干净,不是吗? – hek2mgl

+0

idk如果函数调用的速度比regexp比较快,awk必须对每行进行字段拆分,所以我大概99%确定grep会更加高效并且更简洁。 nbd无论如何。我开始思考这个关键是最后的8个字母是字母数字,所以有点带领我走下grep/regexp路径。 –

+1

感觉你是对的。分割成字段是不必要的开销。感谢您的反馈! – hek2mgl