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

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
樓主: xiaozi0lei
打印 上一主題 下一主題

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

論壇徽章:
0
11 [報告]
發(fā)表于 2013-05-05 10:43 |只看該作者
謝謝Perlvim
你說的很有道理,讀寫都操作一個問題,的確既不安全也可能存在問題。我就不糾結(jié)這個問題了,還是設(shè)置成兩個文件,一個讀,一個寫。這樣保險也清晰。
非常感謝你! Perlvim

回復(fù) 10# Perlvim


   

論壇徽章:
0
12 [報告]
發(fā)表于 2013-05-05 10:43 |只看該作者
你們說的對,數(shù)據(jù)安全最重要,呵呵

回復(fù) 11# b114213903


   

論壇徽章:
2
巨蟹座
日期:2014-05-21 16:42:40巳蛇
日期:2014-05-22 08:44:29
13 [報告]
發(fā)表于 2013-05-06 13:56 |只看該作者
請問樓主你的問題解決了嗎?如何跳過一行呢?把代碼貼出來讓俺瞅瞅唄,急需...

論壇徽章:
0
14 [報告]
發(fā)表于 2013-05-10 17:41 |只看該作者
就是Perlvim兄弟說的方法,如下他的code。
讀取log1文件的每一行,循環(huán)匹配正則表達式,然后把不滿足的寫入log2文件。
  1. #!/usr/bin/perl -w

  2. open FILE,"log1";
  3. open F2,">log2";

  4. foreach (<FILE>){
  5.   next if /\(a\)/;            #此處匹配正則表達式,如果滿足條件就跳過。next關(guān)鍵字是“直接進入下一次循環(huán)”。
  6.   print F2;
  7. }

  8. close F2;
  9. close FILE;
復(fù)制代碼
回復(fù) 14# skyyy90


   

論壇徽章:
0
15 [報告]
發(fā)表于 2013-05-10 22:13 |只看該作者
回復(fù) 1# xiaozi0lei
首先FILE文件句柄加載了log里面的東西
然后F2用了open(文件句柄,"+<文件名"),通過“+<”模式,你可以既可以讀文件,又可以寫文件。你可以通過tell() 函數(shù)在文件內(nèi)部移動,通過seek()函數(shù)進行定位。如果文件不存在,就會被創(chuàng)建。如果文件已經(jīng)存在,原來的數(shù)據(jù)不會被清除。
   

論壇徽章:
0
16 [報告]
發(fā)表于 2013-05-10 22:37 |只看該作者
回復(fù) 1# xiaozi0lei

我給你一個徹底的分析:
比如說我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)這個表達式,剩下在$_里面的是dddfffg\n九個字符。
然后,$_被寫入到F2里面去,F(xiàn)2里面的原來的字符串會被從頭開始重寫結(jié)果是:
F2里原來的串:ddd(a)fffg\n
被替換后的串 :dddfffg\ng\n
然后寫入到log文件里結(jié)果是:
dddfffg
g
   

論壇徽章:
0
17 [報告]
發(fā)表于 2013-05-10 22:42 |只看該作者
回復(fù) 1# xiaozi0lei

對于你的第一個例子你log 是(a)
其實FILE讀入的是(a)\n, F2也讀入(a)\n
然后FILE替換后變成\n,然后寫入F2,變成了\na)\n,寫入文件后就是
空行
a)

   

論壇徽章:
0
18 [報告]
發(fā)表于 2013-05-13 17:32 |只看該作者
本帖最后由 xiaozi0lei 于 2013-05-13 17:34 編輯

非常感謝shuiyi193202的解答,你說的很有道理,而且在unix下的試驗結(jié)果,和你說的一模一樣。不過unix下"\n"是不是應(yīng)該是只占有一個字符的位置。
因為咱們得到的結(jié)果是
-----
空行
a)
-----
上面相當(dāng)于"\n"字符取代了左括號"(",然后第二行是"a)\n"。

再次感謝兄弟的解釋,很清楚,明白。

另:請教一個問題
我發(fā)現(xiàn)unix下和windows下的文本處理工具對"(a)"貌似處理不同。和上面一樣的perl腳本,一樣的log。
如果我用notepad++編輯的話,腳本就不認識log文件中的"(a)"。但是如果換成gvim的話,perl腳本就可以對log中的"(a)"進行處理,但是處理結(jié)果和unix下是不一樣的。就像你上面所說的,window下把"\n"當(dāng)成了兩個字符來對待。得到的結(jié)果如下:
-----
空行
)
-----
上面相當(dāng)于"\n"字符取代了左括號和字符a"(a",然后第二行是")\n"。//這里用中文的右括號表示一下,英文就變成""這個表情了。。
這是不是說明windows平臺和unix平臺對字符編碼的處理是有差異的,望指教一下,謝謝
再次感謝shuiyi193202 兄的解答

回復(fù) 18# shuiyi193202


   

論壇徽章:
0
19 [報告]
發(fā)表于 2013-05-15 13:37 |只看該作者
回復(fù) 19# xiaozi0lei
因為在windows換行符是\r\n,兩個字符,相當(dāng)于unix下面的\n

   

論壇徽章:
7
戌狗
日期:2013-12-15 20:43:38技術(shù)圖書徽章
日期:2014-03-05 01:33:12技術(shù)圖書徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16賽季CBA聯(lián)賽之青島
日期:2016-03-17 20:36:13
20 [報告]
發(fā)表于 2013-05-15 15:29 |只看該作者
xiaozi0lei 發(fā)表于 2013-05-05 06:43
你們說的對,數(shù)據(jù)安全最重要,呵呵

回復(fù) 11# b114213903
你說的很有道理,非常感謝你。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(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