2013-11-27 55 views
-3

我需要在一堆文件中查找帶有某個前綴的字符串,後跟一個正則表達式,但忽略其餘輸入(包括前綴之前的行內容以及匹配正則表達式結束後的內容)。sed,awk,perl或lex:通過前綴+正則表達式查找字符串,忽略輸入的其餘部分

該工作的最佳工具是什麼? grep找到完整的行; sed通常只用於編輯和選擇和替換; awkperl

我也想過lex,但我真的在編譯器後編譯?!


編輯:輸入是HTML文件幾千,前綴+正則表達式將https://([-.0-9A-Za-z]+\.[A-Za-z]{2,})(其中我想$1),而忽視了輸入的其餘部分。

+0

請示例。 「前綴」是什麼意思? –

+0

「https://」將作爲前綴。 – cnst

+0

「regexp」是什麼意思?字符串的例子會有所幫助。 – Kenosis

回答

1

如果你不會有圖案的多於一個的單行線,我可能會使用sed

sed -n -e 's%.*https://\([-.0-9A-Za-z]\{1,\}\.[A-Za-z]\{2,\}\).*%\1%p' 

考慮到數據文件:

Nothing here 
Before https://example.com after 
https://example.com and after 
Before you get to https://www.example.com 
And double your https://example.com for fun and happiness https://www.example.com in triplicate https://a.bb 
and nothing here 

sed腳本每行生成一個條目,當線上有多個條目時顯示最後一個條目:

example.com 
example.com 
www.example.com 
a.bb 

Perl腳本可用於每行多個條目:

$ perl -nle 'print $1 while (m%https://([-.0-9A-Za-z]+\.[A-Za-z]{2,})%g);' data 
example.com 
example.com 
www.example.com 
example.com 
www.example.com 
a.bb 
$ 
+0

我不知道什麼是html輸入;我希望能夠在任何給定的行上找到不止一次的我的模式。 – cnst

相關問題