2013-05-06 26 views
0

如何指定文件中更改URL地址「特等」到「.EN」和例如倒數第二「.COM」爲「.ORG」的perl如何在文本文件中更改URL

結束: http://www.addres.pl 變化: http://www.addres.en

如果在ADDRES存在這樣 http://www.addres.com.pl 變化: http://www.addres.org.en

,如果它看起來像這個 http://www.addres.com.ru 那麼只有.com更改文本文件輸入 http://www.addres.org.ru

例如:控制檯輸出的

http://www.addres.org.en 
http://www.addres.com.pl 
http://www.addre.pl 
http://www.addres.en 
http://www.addres.ru 
http://com ddd http://www.com.pl.com.pl.com.pl.com.pl 
aaa http://www.addres.com.pl! bbb 
ccc (http://www.addre.pl) ddd 

例如:

http://www.addres.org.en 
http://www.addres.org.en 
http://www.addre.en 
http://www.addres.en 
http://www.addres.ru 
http://com ddd http://www.com.pl.com.pl.com.pl.org.en 
aaa http://www.addres.org.en! bbb 
ccc (http://www.addre.en) ddd 

現在我有這樣的檢查,如果輸入的是文件

#!/usr/bin/perl 
use warnings; 
use strict; 
use File::Find; 

if (($#ARGV+1 != 1)||(! -f $ARGV[0])) 
{ 
    print "podaj plik\n"; 
    exit 1; 
} 

#!/usr/local/bin/perl 
open (MYFILE, $ARGV[0]); 
while (<MYFILE>) { 
chomp; 
my $url = $_; 
for ($url) { 
#s|(com)(.??)|org$2| and last; 
s|com.pl|org.en| and last; 
s|com[.]|org.| and last; 
s|[.]pl|.en|; 
} 
print "$url\n"; 
} 
close (MYFILE); 
exit 0; 

如何使這個

s|com[.]ru|org.ru| and last; 

改變這樣

s|com[.]??|org.??| and last; 

所有ADDRES?可以是例如RU,或者連接或所有其他人則PL

+0

這看起來像是簡單的使用's ///'操作符。顯示你的嘗試。 – Barmar 2013-05-06 17:10:37

+0

現在我只需輸入它的文件即可,im剛剛啓動的新文件 – Vardius 2013-05-06 17:15:31

+2

這與問題有什麼關係?顯示打開並讀取文件的代碼。 – Barmar 2013-05-06 17:19:24

回答

0

快速和骯髒的:

use strict; 
while (<>) { 
    s|com[.]pl\b|org.en| or 
     s|[.]pl\b|.en| or 
     s|com[.]ru\b|org.ru|; 
    print; 
} 

,請注意正則表達式秩序和從命令行調用它:perl script.pl in.txt

然後使用文件句柄的詞法變量學習正確的三參數方法(用於防止名稱與MYFILE一樣通用的全局文件句柄相互打開+當詞法變量超出範圍時取得文件關閉) 。

補充:

看你的新樣本行,我想你也許需要更多的東西像這樣(我包括你問你的最後一個編輯結束的正則表達式):

while (<>) { 
    s|com[.]pl([\s!)])|org.en\1| 
     or s|[.]pl([\s!)])|.en\1| 
     or s|com[.]([!pl])([\s!)])|org.\1\2| ; 
    print; 
} 

有關進一步的建議,請閱讀下面的評論。

+0

但它不適用於該網址: 'aaa http://www.addres.org.en! bbb ccc(http://www.addre.en)ddd' – Vardius 2013-05-06 18:05:40

+0

對不起,我粘貼輸出 爲此它不工作'aaa http://www.addres.com.pl! bbb ccc(http://www.addre.pl)ddd' – Vardius 2013-05-06 18:16:04

+0

我沒有看到示例輸入文件。我認爲該文件只有網址。我修改了代碼。你應該閱讀[prelretut](http://perldoc.perl.org/perlretut.html):正則表達式不是那麼可怕。 – 2013-05-06 18:24:45

相關問題