成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

趣味集算:兩行搞定GREP搜索

企業動態
What?兩行代碼搞定GREP搜索?如果不是經常使用Linux,估計你看到這個標題后會一臉不屑加滿臉狐疑: GREP搜索是個什么鬼?又一個搜索引擎問世?比百度牛x嗎?樓主你過來講講,你是如何只用兩行代碼就搞定搜索的。我給你一個關鍵字,你能還我一堆URL?

 [[222652]]

What?兩行代碼搞定GREP搜索?如果不是經常使用Linux,估計你看到這個標題后會一臉不屑加滿臉狐疑: GREP搜索是個什么鬼?又一個搜索引擎問世?比百度牛x嗎?樓主你過來講講,你是如何只用兩行代碼就搞定搜索的。我給你一個關鍵字,你能還我一堆URL?

誤會誤會,你就是給我十個關鍵字,我也還不了一個URL的。因為我說的搜索,不是網絡搜索引擎。正如前面提到的,Linux,我說的是Linux下的一個搜索命令,一個叫GREP的命令。 GREP(global search regular expression(RE) and print out the line),它是一種文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來。比如我們想搜索一個名為readme.txt的文件中,有哪些行包含了raqsoft。則在Linux的命令行中只要輸入如下命令:

執行后,控制臺就會打印出行號,以及包含raqsoft字符串的那些行。

此刻,我想你不禁會問,兩行代碼就能搞定這么復雜的動作?你不要騙我,俺讀書少,可也是寫過程序的人,就拿Java來說,光引用包、類名就得好幾行,然后你的變量總要有吧,你總得查找文件,寫個循環來搜索比對內容吧。問完后就一臉不屑地等著樓主如何自圓其說,樓主要如何不寫變量,不寫循環,來完成示例中的搜索。因為,此時的你,腦子里面涌現出了下述畫面:

  1. import xxx;  
  2. import …  
  3. public class xx{  
  4. String filePath,search;  
  5. ArrayList<File> files = 列出filePath的文本文件  
  6. for(File f:files){  
  7. 讀取文件f的內容  
  8. for(String row:文件內容){  
  9. 如果包含search,打印行號和文件內容  
  10.  
  11.  
  12.  

是的,用常規編程語言來實現文本搜索,少不了變量,離不開循環,不管是用C還是其他語言,浮現的偽代碼都跟上面類似,無非是幾個關鍵字的寫法不一樣。看起來,只寫兩行代碼完成上述功能,是癡人說夢。除非用的是人類語言:“給我打印所有文件中包含search的行出來!”嗯,想象力很豐富,人工智能嘛,呵呵。 

看來是不信?上代碼!

  A
1 =directory@ps(path+”/*.txt”)
2 =A1.run(file(~).read@n().run(if(pos(~,string(search)),output([A1.~,” 第”+string(#)+”行:”,~].string()))))

 嘖嘖,真地只有兩行,果然沒有變量,也沒有循環!不過看起來怪怪的,居然每行前面還有個奇怪的等號,但又沒有被賦值的對象。長得這么奇怪的程序,它真能干活嗎?你可能還在懷疑,我寫的會不會是一段假代碼。不過沒關系,初次見面,有陌生感是正常的。

在DOS窗口讓它跑一遍,再貼個圖:

grep1

看到上述截圖,說明這個代碼確實干活了。它不但能找到文本文件里的串,而且找得還很仔細,它將給定目錄d:/config下的包含子目錄的所有文件都找了出來!

那么問題來了,這門語言是如何處理變量的?比如上述代碼里沒有定義的A1是從哪來的?A1又是個什么類型的變量?不用定義就直接引用?那個賦值的等號,但又沒有賦值對象是啥意思?還有確實沒看到for循環就遍歷了所有文件,是如何實現的?為了說明這些問題,還是得有圖,有圖有真相:

grep2

看到圖片,神秘語言也就露出了真容,原來是個叫做集算器的東東。同時,也似乎好理解一些上述代碼了,原來上述語句都是寫在Excel里的啊!且慢,看好了,這個不是Excel,是集!算!器!人家只是長得跟Excel有點像好嗎。不過對于A1是從哪里來的有了解答,原來每個格子的名字就是變量。所以,不用定義變量就可以寫程序了。好吧,那么上述代碼為啥沒有循環呢?看不到循環,并不代表它沒有,你肯定循環了是不是?對對對,循環還是要的,至于到底是如何循環的,依然看圖:

grep3

上圖是一個數據內容查看面板,就像調試程序時的watch窗口。左上角的A1表示當前查看的是A1。那成員是什么意思?哦,原來A1就是一個封裝了數組的對象!此時的你有了一個大致的認識。那么第二行代碼中A1.run()在你心中已經有了答案,就是針對這個數組做一個循環嘛!原來如此!然后后面的代碼意思應該就是讀取文件內容,然后比較并輸出到控制臺。還有那個沒賦值對象的等號呢?這里的等號不是賦值的意思,而是表示后面跟上的是需要計算的表達式,沒有等號時就是一些其他的,比如常量、注釋、或者關鍵字等。

至此,只需兩行代碼就搞定GREP搜索,并不是噱頭,是真實可行的,且有實際功能的一個小工具。不過,這文章還是有點標題黨,兩行代碼的GREP并沒有做正則表達式匹配,也還不能支持大文件。那么,怎么才能實現完整的GREP呢?又需要多少行代碼呢?而且,我估計你心中仍有諸多疑惑,這種網格式語言到底有什么用?那種像是封裝了數組的對象又有什么好處?帶著你的好奇,繼續關注潤乾軟件吧。

責任編輯:龐桂玉 來源: 潤乾
相關推薦

2023-10-12 10:11:19

2024-02-20 12:49:00

CSS函數前端

2023-09-12 14:58:00

Redis

2021-06-18 10:12:09

JS代碼前端

2018-03-15 14:18:32

潤乾漏斗轉換集算示例

2022-09-25 23:10:53

Python數據集機器學習

2020-06-29 07:49:10

kill -9Java程序員

2021-09-15 08:45:55

Python文本文件代碼

2021-01-15 05:36:48

MySQL錯位數據庫

2025-03-06 08:00:00

庫存微服務架構

2021-02-03 09:36:36

Python

2021-04-07 11:08:15

Sudo命令Linux

2019-02-13 14:04:01

2022-03-09 14:57:53

Numbapython

2025-04-24 08:30:00

函數代碼格式化

2019-02-15 09:50:39

單身程序員脫單

2024-03-04 13:21:00

模型訓練

2025-06-24 09:00:00

訓練模型代碼

2021-10-28 09:42:38

代碼編碼開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文在线a在线 | 国产精品久久久久久久久免费 | caoporon| 成人国产精品免费观看 | 亚洲在线看 | 成年免费大片黄在线观看一级 | 国产欧美在线一区 | 久久99精品久久久久久狂牛 | 日本福利片 | 久久久国产精品 | 日本精品视频在线 | 国产在线一区二区三区 | 亚洲激情视频在线 | 99久久免费观看 | 在线国产一区二区三区 | 一级片子 | 精品一区二区在线观看 | 久久久久国产成人精品亚洲午夜 | 国产精品夜色一区二区三区 | 成人福利在线 | 成人免费看黄 | 91精品国产91久久久久久最新 | 国产精品一区二区在线免费观看 | 成人性视频免费网站 | 欧美高清视频一区 | 羞羞视频一区二区 | 日韩at| 一级黄色毛片a | 精品久久国产 | 国产精品18久久久久久白浆动漫 | 99亚洲| 一区二区三区在线电影 | 一区二区三区四区在线播放 | 久久国产美女视频 | 欧美日产国产成人免费图片 | 国产福利一区二区 | 99热.com | 日韩免费视频 | 日韩在线视频免费观看 | 久久99精品久久久久久国产越南 | 国产精品一区二区三区四区 |