亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
123下一頁
最近訪問板塊 發(fā)新帖
查看: 6642 | 回復(fù): 22
打印 上一主題 下一主題

【結(jié)貼】perl正則表達(dá)式替換字符為空 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-05-03 21:38 |只看該作者 |倒序?yàn)g覽
本帖最后由 xiaozi0lei 于 2013-05-17 11:37 編輯

請教一個問題:

#!/usr/bin/perl -w

open FILE,"log";
open F2,"+<log";

foreach (<FILE>{
       s@\(a\)@@;
       print F2;
}

close F2;
close FILE;


log中的內(nèi)容為
(a)

輸出結(jié)果為:
                        #這里是個空行,原先的(a)匹配上后被替換為空,但是為什么在下一行會多出來一個a)
a)



請教大家,幫幫忙,我想了好久都沒想明白。我的目的就是把匹配到的行刪除。
謝謝!
——————————————
感謝Perlvim和shuiyi193202兄弟的解釋

shuiyi193202兄細(xì)致清楚的解答
首先FILE文件句柄加載了log里面的東西
然后F2用了open(文件句柄,"+<文件名",通過“+<”模式,你可以既可以讀文件,又可以寫文件。你可以通過tell() 函數(shù)在文件內(nèi)部移動,通過seek()函數(shù)進(jìn)行定位。如果文件不存在,就會被創(chuàng)建。如果文件已經(jīng)存在,原來的數(shù)據(jù)不會被清除。
我給你一個徹底的分析:
比如說我log里面原來是ddd(a)fffg
首先第一個FIEL讀入文件log,這里行串是應(yīng)當(dāng)是“ddd(a)fffg\n"--注意\n會被加載的,占兩個字符
然后,第二個F2讀入文件log,這里行串也是"ddd(a)fffg\n"--注意\n會被加載的,占兩個字符
接著,F(xiàn)IEL里面的行被處理,去掉了(a)這個表達(dá)式,剩下在$_里面的是dddfffg\n九個字符。
然后,$_被寫入到F2里面去,F(xiàn)2里面的原來的字符串會被從頭開始重寫結(jié)果是:
F2里原來的串:ddd(a)fffg\n
被替換后的串 :dddfffg\ng\n
然后寫入到log文件里結(jié)果是:
dddfffg
g

論壇徽章:
1
處女座
日期:2014-03-28 10:11:00
2 [報告]
發(fā)表于 2013-05-03 22:06 |只看該作者
本帖最后由 rongchaogao 于 2013-05-03 22:34 編輯

  1. use strict;
  2. use warnings;

  3. my $ch="(a)";
  4. $ch=~s/\(a\)//;
  5. print "$ch\n";
復(fù)制代碼
我只能說這個可以正常運(yùn)行。

論壇徽章:
0
3 [報告]
發(fā)表于 2013-05-03 22:14 |只看該作者
兄弟,我沒看明白,我照著你的code運(yùn)行了一下,提示我:在替換(s///)的時候使用了未初始化的值。回復(fù) 2# rongchaogao


   

論壇徽章:
1
處女座
日期:2014-03-28 10:11:00
4 [報告]
發(fā)表于 2013-05-03 22:20 |只看該作者
本帖最后由 rongchaogao 于 2013-05-03 22:22 編輯

回復(fù) 3# xiaozi0lei


    加Q說!可能你默認(rèn)開啟了-w,我又修改了,你試試

論壇徽章:
0
5 [報告]
發(fā)表于 2013-05-03 22:23 |只看該作者
好的,我的QQ 43669499 謝謝回復(fù) 4# rongchaogao


   

論壇徽章:
0
6 [報告]
發(fā)表于 2013-05-03 23:06 |只看該作者
  1. #!/usr/bin/perl -w

  2. open FILE,"log";
  3. open F2,"+<log";

  4. foreach (<FILE>){
  5.   next if /\(a\)/;
  6.   print F2;
  7. }

  8. close F2;
  9. close FILE;
復(fù)制代碼

論壇徽章:
0
7 [報告]
發(fā)表于 2013-05-04 10:45 |只看該作者
Hi, Perlvim 謝謝你的回復(fù)
1. 按照你寫的code,我執(zhí)行后無法去掉log中的(a),如果log中只有一個(a)的話,咱們的code中是直接跳過,原log中的(a)仍然存在。
如果是多行l(wèi)og的話:

log中的內(nèi)容為
(a)
bbb
ccc

這種情況下執(zhí)行后,會得到多出一行
bbb
ccc
ccc

2. 想順便請教個問題,在讀寫文件時,“<和>和>>”這三種情況書上都寫的很清楚,但是"+<和+>"這兩種情況在執(zhí)行的時候有什么區(qū)別?我現(xiàn)在的理解是這樣的:"+<"相當(dāng)于打開該文件,但不清空其中的內(nèi)容。我們可以覆蓋文件中的內(nèi)容,不過沒寫到的行仍然保持原來的內(nèi)容。與">"不一樣的地方,就是打開文件的時候,先不執(zhí)行清空的動作。

3. 另外我在小駱駝書(Learning Perl 5)中的第九章147頁中看到s/,.*een//; 這里后面使用的也是替換為空?墒俏易约涸囼(yàn)的s/原字符/替換后字符/,只要替換后字符為空,s/原字符//,寫入的時候,文件最后就會多出幾個字符。這種情況只在寫入同一文件時會發(fā)生,如果寫入新的文件就不會存在這些問題。會不會是"+<"這種寫操作的原因?

回復(fù) 6# Perlvim


   

論壇徽章:
0
8 [報告]
發(fā)表于 2013-05-04 10:45 |只看該作者
幫忙想想
回復(fù) 7# tkl0115


   

論壇徽章:
0
9 [報告]
發(fā)表于 2013-05-04 16:22 |只看該作者
抱歉,讓你失望了,我只知道一種操作符,> , 而且每次都只會這么寫

open(my $fh, '>', 'filename') or die $!;

實(shí)在搞不清楚那么多的讀寫符號。我在讀寫文件時,現(xiàn)在只用 File::Slurp 模塊的
read_file write_file 函數(shù)接口。

在處理文件時,我很少把輸出文件和輸入文件設(shè)置成一個。因?yàn)橐坏└沐e,數(shù)據(jù)就毀了。

通常是,設(shè)置兩個不同的文件,一個讀,一個寫,經(jīng)過確認(rèn)沒有問題后,也不敢把原先的文件覆寫。而是備份起來。

遍歷文件中,對于忽略的行,通常用 next 那么在新文件中就不出現(xiàn)了。

論壇徽章:
7
巳蛇
日期:2013-11-28 09:22:59天秤座
日期:2014-10-25 15:40:452015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亞冠之德黑蘭石油
日期:2015-07-15 08:46:452015亞冠之平陽省
日期:2015-11-08 16:27:53白銀圣斗士
日期:2015-11-14 09:58:12
10 [報告]
發(fā)表于 2013-05-04 21:46 |只看該作者
Perlvim 發(fā)表于 2013-05-04 16:22
抱歉,讓你失望了,我只知道一種操作符,> , 而且每次都只會這么寫

open(my $fh, '>', 'filename') or d ...


頂!數(shù)據(jù)安全是最重要的!
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP