正則表達式及Linux三大文本處理工具

来源:http://www.cnblogs.com/lzyang121/archive/2017/07/12/7151396.html
-Advertisement-
Play Games

一、正則表達式 1、匹配字元的類型 [a-z]:小寫字母 [A-Z]:大寫字母 [a-Z]:小或大寫字母 [0-9]:數字 [a-zA-Z0-9]:表示匹配一個為字母或數字的字元 . :匹配1個任意字元,空格除外 [0-f]:16進位數 abc | def:abc或def a (bc | de) f ...


一、正則表達式

1、匹配字元的類型

  • [a-z]:小寫字母
  • [A-Z]:大寫字母
  • [a-Z]:小或大寫字母
  • [0-9]:數字
  • [a-zA-Z0-9]:表示匹配一個為字母或數字的字元
  • . :匹配1個任意字元,空格除外 
  • [0-f]:16進位數
  • abc | def:abc或def
  • a (bc | de) f:abcf 或 adef
  • \<:單詞頭 單詞一般以空格或特殊字元做分隔,連續的字元串被當做單詞
  • \>:單詞尾
  • [^表達式]:除小寫字母以外的所有字元,如此類推。

2、後跟以下符號控制匹配的數量

此類符號的左側要有上面第一點的表達式

  • 表達式*:0或n個字元
  • 表達式+:1或n個字元
  • 表達式?:0或1個字元
  • 表達式{n}:n個字元
  • 表達式{n:m}:n到m個字元
  • 表達式{n,}:至少n個字元

【例】[a-z]*表示匹配0個或多個小寫字母

3、將匹配的字元控制在頭尾

  • ^表達式:頭部符合
  • 表達式$:尾部符合

 

二、Linux三大文本處理工具

1、egrep 篩選工具

grep的擴展版,可以使用正則表達式

語法:

egrep -選項  '正則表達式'  文件名

選項:

  • -n :顯示行號
  • -o :只顯示匹配的內容
  • -q :靜默模式,沒有任何輸出,得用$?來判斷執行成功沒有,即有沒有過濾到想要的內容
  • -l :如果匹配成功,則只將文件名列印出來,失敗則不列印,通常-rl一起用,grep -rl 'root' /etc
  • -A :如果匹配成功,則將匹配行及其後n行一起列印出來
  • -B :如果匹配成功,則將匹配行及其前n行一起列印出來
  • -C :如果匹配成功,則將匹配行及其前後n行一起列印出來
  • --color
  • -c :如果匹配成功,則將匹配到的行數列印出來
  • -i :忽略大小寫
  • -v :取反,不匹配
  • -w:匹配單詞

2、sed 流編輯器

語法:

語法1:sed  -選項  '數字定位+命令'  文件名

選項:

  • -n:靜默模式,不輸出
  • -e:多項編輯,這個不是很清楚
  • -i:直接修改文件內容,而不是輸出
  • -r:擴展模式,可使用正則表達式
  • -f:指定文件名,將動作寫在新的文件內

定位:

①數字定位(輸入行序號定位)

  • 1:單行 
  • 1,3:範圍 從第一行到第三行
  • 2,+4:匹配行後若幹行
  • 4,~3:從第四行到下一個3的倍數行
  • 2~3:第二行起每間隔三行的行
  • $:尾行
  • 1!:除了第一行以外的行

【例】sed -n '1p' /etc/passwd

②正則表達式定位

  • 正則必須用//包裹起來
  • 擴展正則需要用 -r 參數或轉義
  • 替換可使用正則表達式的子模式,即小括弧(),可以\1、\2代表子模式

【例】sed -r 's/(.)(.)/\2\1/ file1 表示將匹配到的第一部分和第二部分替換

*貪婪選項:填上g,代表把一行中所有匹配項替換

命令:

  • a ∶ 追加append, 
  • c ∶ 改變change, 
  • d ∶ 刪除delete,
  • i ∶ 插入insert, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行)
  • p∶ 列印print
  • s∶ 取代substitute,可以直接進行替換的工作。通常這個 s 的動作可以搭配正則表達式。例如 1,20s/old/new/g

*s命令特別說明:

使用{命令1:命令2:命令3}可增加使用多個命令

s命令語法:sed  -r  '替換命令s/正則表達式/替換內容/貪婪選項g'  文件名

3、awk 文本分析工具

由命令、正則(需要用//包圍起來)、比較和關係運算組合而成

使用option中的-F參數定義間隔符號

用$1,$2,$3等的順序表示files中每行以間隔符號分隔的各列不同域,NF變數表示當前記錄的欄位數

語法

awk -選項 參數  '邏輯判斷{命令 變數1,變數2,變數3}' 文件名

選項

  • -F 定義欄位分隔符,預設的分隔符是連續的空格或製表符
  • -v 定義變數並賦值 也可以借用次方式從shell變數中引入

AWK變數

  • NR 當前記錄的個數(全部文件連接後的統計)
  • FNR 當前記錄的個數(僅為當前文件的統計,非全部)
  • FS 欄位分隔符 預設為連續空格或製表符,可以使用多個不同的符號做分隔符 -F[:/]
  • OFS 輸出字元的分隔符 預設是空格

【OFS例】

# awk -F: 'OFS="=====" {print $1,$2}' /etc/passwd
root=====x

  • NF 當前讀入行的欄位個數
  • ORS 輸出記錄分隔符 預設是換行

【ORS例】

# awk -F: 'ORS="=====" {print $1,$2}' /etc/passwd
root x=====bin x=====

  • FILENAME 當前文件名

【例1】使用AWK變數
# awk '{print NR,FNR,$1}' file1 file2 
1 1 aaaaa
2 2 bbbbb
3 3 ccccc
4 1 dddddd
5 2 eeeeee
6 3 ffffff
# 

【例2】引用shell變數的方法

# a=root
# awk -v var=$a -F: '$1 == var {print $0}' /etc/passwd
或者 把整個命令拆開傳遞,讓shell變數外露,
# awk -F: '$1 == "'$a'" {print $0}' /etc/passwd
# a=NF
# awk -F: '{print $'$a'}' /etc/passwd

 

邏輯運算(可直接引用域進行運算)

  • = += -= /= *=:賦值
  • && || !:邏輯與 邏輯或 邏輯非
  • ~ !~:匹配正則或不匹配,正則需要用 /正則/ 包圍住
  • < <= > >= != ==:關係,比較字元串時要把字元串用雙引號引起來
  • $:欄位引用需要加$,而變數引用直接用變數名取
  • + - * / % ++ --:運算符

轉義序列

  • \\ \自身
  • \$ 轉義$
  • \t 製表符
  • \b 退格符
  • \r 回車符
  • \n 換行符
  • \c 取消換行

  

有錯誤請指正,更多詳細資料參考:

http://www.cnblogs.com/linhaifeng/p/6596660.html#_label3


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

-Advertisement-
Play Games
更多相關文章
  • 官方參考資料說明: tesseract 依賴庫: (https://github.com/tesseract-ocr/tesseract/wiki/Compiling#linux) leptonica 依賴庫: ( http://www.leptonica.org/source/README.htm ...
  • 1、Fatal Error[Pe1696]: cannot open source file core_cmInstr.h 2、Warning[25]: Label 'Reset_Handler' is defined pubweak in a section implicitly declared ...
  • squid作用 1正向代理 標準的代理緩衝伺服器,須在每一個內部主機的瀏覽器上明確指明代理伺服器的IP地址和埠號。 透明代理緩衝伺服器,代理操作對客戶端的瀏覽器是透明的(即不需指明代理伺服器的IP和埠)Iptables或者Ipchains實現 參考http://os.51cto.com/art/ ...
  • 編譯內核4.12 第一步 我們首先應該下載kernel的軟體包,可以點擊https://www.kernel.org/進行下載 第二步 然後解壓linux 對應版本的軟體包到到當前目錄,當前本人所在目錄為用戶家目錄 tar xvf linux 4.12.tar.xz 第三步 cd切換進解壓後的目錄中 ...
  • 問題現象: Tomcat(8.5.13)部署了SuperMap iServer,併發用戶在100左右。系統運行一段時間後,服務崩潰。異常提示 問題分析: 1、看到日誌中的提示信息後,認為是系統記憶體不足導致的。於是在伺服器上添加了監控腳本(如下圖),每1s記錄一次系統記憶體和tomcat記憶體。 監控一段 ...
  • 這個問題在剛學Linux遇到的,centOS7的網卡啟動不起來,導致建不了集群。如下圖沒有ifconf-env33網卡的IP 還有下麵這個圖》》》 如果你遇到了,呵呵呵,迷之微笑。 虛擬機網卡沒起來,這個問題比較尷尬,我只能告訴你解決方法。。 一、關閉電腦。真的,小編調了一天錯,在網上各種找解決辦 ...
  • linux入侵分析,重裝ssh,配置ssh黑白名單和管理IP ...
  • Let's Encrypt免費SSL證書的出現,也會對傳統提供付費SSL證書服務的商家有不小的打擊。到目前為止,Let's Encrypt獲得IdenTrust交叉簽名,這就是說可以應用且支持包括FireFox、Chrome在內的主流瀏覽器的相容和支持,雖然目前是公測階段,但是也有不少的用戶在自有網 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...