Linux如何搜索查找文件裡面內容

来源:http://www.cnblogs.com/kerrycode/archive/2016/08/24/5802420.html
-Advertisement-
Play Games

在Linux系統當中,如何搜、索查找文件裡面的內容呢? 這個應該是系統維護、管理當中遇到最常見的需求。那麼下麵介紹,總結一下如何搜索、查找文件當中的內容。 搜索、查找文件當中的內容,一般最常用的是grep命令,另外還有egrep, vi命令也能搜索文件裡面內容 1:搜索某個文件裡面是否包含字元串,使... ...


   在Linux系統當中,如何搜、索查找文件裡面的內容呢? 這個應該是系統維護、管理當中遇到最常見的需求。那麼下麵介紹,總結一下如何搜索、查找文件當中的內容。

搜索、查找文件當中的內容,一般最常用的是grep命令,另外還有egrep, vi命令也能搜索文件裡面內容

 

1:搜索某個文件裡面是否包含字元串,使用grep "search content" filename1, 例如

 

$ grep ORA alert_gsp.log

$ grep "ORA" alert_gsp.log

 

例如我們需要搜索、查找utlspadv.sql文件中包含ORA的字元內容

[oracle@DB-Server admin]$ grep "ORA" utlspadv.sql
  --   ORA-XXXXX:        Monitoring already started. If for example you want 
  --   ORA-20111:
  --   ORA-20112:
  --   ORA-20113: 'no active monitoring job found'
  --   ORA-20113: 'no active monitoring job found'
  -- 0 |<PS> =>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM 0 0 2 99.3% 0% 0.7% ""
  -- |<PR> DBS1.REGRESS.RDBMS.DEV.US.ORACLE.COM=> 100% 0% 0% "" |<PR> ...
  -- =>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM 92 7 99.3% 0% 0.7% "" |<PR> ...
  -- |<C> CAPTURE_USER1=>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM 2 0 0 0.E+00
  -- |<C> CAPTURE_USER1=>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM
  -- ORA-20111:
  -- ORA-20112:
  --   ORA-20100:
  --   ORA-20113: 'no active monitoring job found'
  --   ORA-20113: 'no active monitoring job found'
[oracle@DB-Server admin]$ 

 

如上所示,這個是一個模糊匹配,其實我是想要查看ORA這類錯誤,那麼我要過濾掉哪一些沒有用的,搜索的內容修改一下即可(當然也可以使用特殊參數,後面有講述),如下所示。

[oracle@DB-Server admin]$ grep "ORA-" utlspadv.sql
  --   ORA-XXXXX:        Monitoring already started. If for example you want 
  --   ORA-20111:
  --   ORA-20112:
  --   ORA-20113: 'no active monitoring job found'
  --   ORA-20113: 'no active monitoring job found'
  -- ORA-20111:
  -- ORA-20112:
  --   ORA-20100:
  --   ORA-20113: 'no active monitoring job found'
  --   ORA-20113: 'no active monitoring job found'
[oracle@DB-Server admin]$ 

clip_image001

 

 

2: 如果你想搜索多個文件是否包含某個字元串,可以使用下麵方式

 

grep "search content" filename1 filename2.... filenamen

grep "search content" *.sql

例如我想查看當前目錄下,哪些sql腳本包含視圖v$temp_space_header(註意:搜索的內容如果包含特殊字元時,必須進行轉義處理,如下所示)

 

[oracle@DB-Server admin]$ grep "v\$temp_space_header" *.sql
catspacd.sql:drop public synonym v$temp_space_header;
catspacd.sql:drop public synonym gv$temp_space_header;
catspace.sql:create or replace view v_$temp_space_header as select * from v$temp_space_header;
catspace.sql:create or replace public synonym v$temp_space_header for v_$temp_space_header;
catspace.sql:create or replace view gv_$temp_space_header as select * from gv$temp_space_header;
catspace.sql:create or replace public synonym gv$temp_space_header
catspace.sql:            FROM gv$temp_space_header
[oracle@DB-Server admin]$ 

 

clip_image002

 

3:如果需要顯示搜索文本在文件中的行數,可以使用參數-n

[oracle@DB-Server admin]$ grep  -n "v\$temp_space_header" *.sql
catspacd.sql:68:drop public synonym v$temp_space_header;
catspacd.sql:71:drop public synonym gv$temp_space_header;
catspace.sql:1952:create or replace view v_$temp_space_header as select * from v$temp_space_header;
catspace.sql:1953:create or replace public synonym v$temp_space_header for v_$temp_space_header;
catspace.sql:1956:create or replace view gv_$temp_space_header as select * from gv$temp_space_header;
catspace.sql:1957:create or replace public synonym gv$temp_space_header
catspace.sql:2357:            FROM gv$temp_space_header
[oracle@DB-Server admin]$ 

 

 

4: 如果搜索時需要忽略大小寫問題,可以使用參數-i

 
[oracle@DB-Server admin]$ grep  "V\$TEMP_SPACE_HEADER" *.sql
[oracle@DB-Server admin]$ grep -i "V\$TEMP_SPACE_HEADER"  *.sql
catspacd.sql:drop public synonym v$temp_space_header;
catspacd.sql:drop public synonym gv$temp_space_header;
catspace.sql:create or replace view v_$temp_space_header as select * from v$temp_space_header;
catspace.sql:create or replace public synonym v$temp_space_header for v_$temp_space_header;
catspace.sql:create or replace view gv_$temp_space_header as select * from gv$temp_space_header;
catspace.sql:create or replace public synonym gv$temp_space_header
catspace.sql:            FROM gv$temp_space_header
[oracle@DB-Server admin]$ 

另外,例如檢查安裝的MySQL組件

[root@DB-Server init.d]# rpm -qa | grep -i mysql
 
MySQL-devel-5.6.23-1.linux_glibc2.5
 
MySQL-client-5.6.23-1.linux_glibc2.5
 
MySQL-server-5.6.23-1.linux_glibc2.5

 

 

5:從文件內容查找不匹配指定字元串的行:

 

$ grep –v "被查找的字元串" 文件名

例如查找某些進程時,我們不想顯示包含命令grep ora_mmon的進程,如下所示

[oracle@DB-Server admin]$ ps -ef  | grep ora_mmon  
oracle   16675 16220  0 00:09 pts/1    00:00:00 grep ora_mmon
oracle   21412     1  0 Aug22 ?        00:00:07 ora_mmon_gsp
[oracle@DB-Server admin]$ ps -ef  | grep ora_mmon  | grep -v grep
oracle   21412     1  0 Aug22 ?        00:00:07 ora_mmon_gsp
[oracle@DB-Server admin]$ 

 

6:搜索、查找匹配的行數:

 

$ grep -c "被查找的字元串" 文件名

[oracle@DB-Server admin]$ 
[oracle@DB-Server admin]$ grep   "v\$temp_space_header" *.sql
catspacd.sql:drop public synonym v$temp_space_header;
catspacd.sql:drop public synonym gv$temp_space_header;
catspace.sql:create or replace view v_$temp_space_header as select * from v$temp_space_header;
catspace.sql:create or replace public synonym v$temp_space_header for v_$temp_space_header;
catspace.sql:create or replace view gv_$temp_space_header as select * from gv$temp_space_header;
catspace.sql:create or replace public synonym gv$temp_space_header
catspace.sql:            FROM gv$temp_space_header
[oracle@DB-Server admin]$ grep -c  "v\$temp_space_header"  catspacd.sql
2
[oracle@DB-Server admin]$ grep -c  "v\$temp_space_header"  catspace.sql
5
[oracle@DB-Server admin]$ 

clip_image003

 

 

7:有些場景,我們並不知道文件類型、或那些文件包含有我們需要搜索的字元串,那麼可以遞歸搜索某個目錄以及子目錄下的所有文件

 

[oracle@DB-Server ~]$ grep -r "v\$temp_space_header" /u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql:create or replace view v_$temp_space_header as select * from v$temp_space_header;

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql:create or replace public synonym v$temp_space_header for v_$temp_space_header;

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql:create or replace view gv_$temp_space_header as select * from gv$temp_space_header;

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql:create or replace public synonym gv$temp_space_header

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql: FROM gv$temp_space_header

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspacd.sql:drop public synonym v$temp_space_header;

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspacd.sql:drop public synonym gv$temp_space_header;

[oracle@DB-Server ~]$

 

8:如果我們只想獲取那些文件包含搜索的內容,那麼可以使用下命令

 

[oracle@DB-Server ~]$ grep -H -r "v\$temp_space_header" /u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/ | cut -d: -f1

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspacd.sql

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspacd.sql

[oracle@DB-Server ~]$ grep -H -r "v\$temp_space_header" /u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/ | cut -d: -f1 | uniq

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspacd.sql

[oracle@DB-Server ~]$

 

9:如果只想獲取和整個搜索字元匹配的內容,那麼可以使用參數w

 

你可以對比一下兩者的區別

[oracle@DB-Server admin]$ grep -w "ORA" utlspadv.sql
  --   ORA-XXXXX:        Monitoring already started. If for example you want 
  --   ORA-20111:
  --   ORA-20112:
  --   ORA-20113: 'no active monitoring job found'
  --   ORA-20113: 'no active monitoring job found'
  -- ORA-20111:
  -- ORA-20112:
  --   ORA-20100:
  --   ORA-20113: 'no active monitoring job found'
  --   ORA-20113: 'no active monitoring job found'
[oracle@DB-Server admin]$ grep  "ORA" utlspadv.sql
  --   ORA-XXXXX:        Monitoring already started. If for example you want 
  --   ORA-20111:
  --   ORA-20112:
	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 簡要複習一下ARM9中斷控制器的控制過程: 1.首先能識別觸發的中斷(對應中斷源必須打開,然後查詢當前中斷狀態寄存器),硬體會操控PC跳到中斷向量入口(IRQ_HANDLE,硬體控制的只要是IRQ中斷類型就會進入),在中斷跳轉函數裡面保存現場(保存R0等等工作寄存器)--跳到服務函數(裡面進行中斷源 ...
  • 文件描述符 可以理解為linux跟蹤打開文件,而分配的一個數字,這個數字有點類似c語言操作文件時候的句柄,通過句柄就可以實現文件的讀寫操作 用戶可以自定義文件描述符範圍是:3 num,這個最大數字,跟用戶的:ulimit –n 定義數字有關係,不能超過最大值 查看系統文件描述符最大值 linux系統 ...
  • Centos6.2代碼 CentOS 6.0沒有預設沒有裝語言支持(Language Support),因此很不方面。 終於發現了有效的方法: su root yum install "@Chinese Support" exit 最後一步:logout,註意是註銷,然後再次登錄此用戶。 當然這裡安... ...
  • 在ubuntu下網路管理器Network Manager莫名奇妙出現無法連接無線網的情況,於是昨天就開始著手解決這一問題: 一 :卸載 1.第一步卸載Network-Manager (具體字母的大小寫我沒註意,如果Network-Manager不能成功,那就換成network-manager試試,卸 ...
  • 熟悉 CDN 行業主流技術的朋友應該都比較清楚,雖然 Nginx 近幾年發展的如日中天,但是基本上沒有直接使用它自帶的 proxy_cache 模塊來做緩存的,原因有很多,例如下麵幾個: 不支持多盤 不支持裸設備 大文件不會切片 大文件的 Range 請求表現不盡如人意 Nginx 自身不支持合併回 ...
  • 最近開始看操作系統的書(本身不是這個方向的),單看書本管程還是不能完全理解,現在簡單總結一下吧。 1.管程 (英語:Monitors,也稱為監視器) 是一種程式結構,結構內的多個子程式(對象或模塊)形成的多個工作線程互斥訪問共用資源。這些共用資源一般是硬體設備或一群變數。管程實現了在一個時間點,最多 ...
  • Background 使用Keil RTX RTOS的項目開發過程中,在加入一些新的代碼之後,發現線上程們被創建並被啟動之後,程式就跑飛了。 藉助Keil的RTOS debug視窗,發現有其中2個線程有stack overflow的現象。 於是開始思考RTOS thread stack size的設 ...
  • linux的基本原則: 1、有目的單一的小程式組成,組合小程式完成複雜任務。 2、一切皆文件 3、儘量避免捕獲用戶介面 4、配置文件保存為純文本格式 CLI介面: 命令提示符,prompt,bash #:root $:普通用戶 命令格式: 命令 選項 參數 選項: [] :可省略 <>:必選 ... ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...