我已經完成了這個目前爲止,但它仍然不起作用。我想打開一個文件,並在perl中替換最後一次出現的字符串模式
open (GOOD_FILE,"<$pre.XXX.XXX$post") or die "Cannot open XXX";
# temporarily undefine the input line separator to read the entire file at once:
my $text = do { local $/; <GOOD_FILE> };
close GOOD_FILE or die $!;
#File name to replace XXXX.XXXXX.XXXX.XXXX.CCCC where last CCCC can be anything
$text =~ s/^(.*\n)?XXXX\.XXXX\.XXXX\.[^\n]*/$1myname/s;
open (GOOD_FILE,"<$pre.XXXX.XXXX$post") or die "Cannot open XXXX";
print GOOD_FILE $text;
close GOOD_FILE or die $!;
輸入文件看起來是這樣的:
I am tester testing
I am still learning.
XXXX.XXXX.XXXX.XXXX.CCCC
I am tester.
XXXX.XXXX.XXXX.XXXX.PPPP
應該產生這樣的輸出:
I am tester testing
I am still learning.
XXXX.XXXX.XXXX.XXXX.CCCC
I am tester.
myname.
但是我得到空文件。
謝謝你們,我能夠解決問題使用什麼替換我只是正則表達式作爲變量的變量,它工作正常。
請參閱更新的代碼,如果你能幫助我,這將是偉大的。 – mysteriousboy
寫入時,您需要以'>'模式打開文件,而不是'<'。此外,它看起來像你的正則表達式在'CAM'之後有一個額外的'\ .',即使在你的示例輸入中該位置沒有出現句點。最後,我非常強烈地建議用'use strict;'和'use warnings'開始你的腳本;並且解決他們產生的任何投訴;我很確定啓用了警告會告訴你第一個錯誤。 –
我已經使用strick和使用警告和糾正寫模式來寫文件,但仍然不寫。這裏是我的替換$ text =〜s/^(。* \ n)?NSHT \ .FIN \ .CAM0000 \ .ESCR \ .INPUT01 \。*/$ 1myname/s; – mysteriousboy