文本處理工具之grup && 正則表達式

来源:https://www.cnblogs.com/wang-jin/archive/2018/07/14/9308727.html
-Advertisement-
Play Games

Linux文本處理三劍客 grep:文本過濾(模式:pattern)工具 grep, egrep, fgrep(不支持正則表達式搜索) sed:stream editor,文本編輯工具 awk:Linux上的實現gawk,文本報告生成器 cat: 文件查看命令: -E: 顯示行結束符$ -n: 對顯 ...


  Linux文本處理三劍客 grep:文本過濾(模式:pattern)工具 grep, egrep, fgrep(不支持正則表達式搜索) sed:stream editor,文本編輯工具 awk:Linux上的實現gawk,文本報告生成器 cat: 文件查看命令: -E: 顯示行結束符$ -n: 對顯示出的每一行進行編號 -A:顯示所有控制符 -b:非空行編 -s:壓縮連續的空行成一行 more:less:分頁顯示,類似於man的查看格式 tac :以列為單位倒著查看文件 rev :以行為單位倒著查看文件   head 預設顯示開頭10行, 預設10行 -nX:X表示數字 -X tail: 預設10行 -nX -X -f 基於文件描述符追蹤 -F 基於文件名追蹤 tailf: 基於文件描述符追蹤,如果文件不增長,它不會訪問磁碟文件,減少了IO訪問   centos6: service network start或restart或stop:啟動或重啟或關閉網路服務 chkconfig iptables on或off :設置開機啟動或關閉防火牆 1.service httpd start 2.echo hello > /var/www/html/index.html   df: 查看磁碟的掛載情況 lsblk:查看塊設備 df |tr -s " " | cut -d" " -f5 |cut -d% -f1 取出磁碟的使用情況 df |tr -s " " % |cut -d% -f5 ifconfig | head -2|tail -1|tr -s " "|cut -d" " -f3 取IP地址 172.18.187.75 paste:合併兩個文件同行號的列到一行   seq:只能列出數字 [root@centos6 ~]#seq 1 5 > f1 [root@centos6 ~]#seq 6 10 > f2 [root@centos6 ~]#paste f1 f2 1 6 2 7 3 8 4 9 5 10 paste -d " " f1 f2 :作為分隔符 [root@centos6 ~]#paste -d ":" f1 f2 1:6 2:7 3:8 4:9 5:10 paste -s f1 把指定文件多行變為一行 wc:計數單詞總數、行總數、位元組總數和字元總數,可以對文件或stdin中的數據運行 [root@centos6 ~]#wc /etc/passwd 62 83 2752 /etc/passwd 行數 字數 位元組數 常用選項 -l 只計數行數 -w 只計數單詞總數 -c 只計數位元組總數 -m 只計數字元總數 -L 顯示文件中最長行的長度 export :聲明變數(全局變數)LC_COLLATE=C sort: 預設排序方式受LC_COLLATE影響為UTF-8按首字母來排 sort -r 倒序 sort -u 去重 sort -t 指定分隔符 sort -k以第幾列 sort -t:- k3 -n /etc/passwd 以,取第三列:作為分隔符,加-n時以數字排序 df |tr -s " " % |cut -d% -f5 |sort -nr |head -1 jieguo 100 sort -n 將指定列當做整體並以數字排序 cut -d: -f1,3 /etc/passwd |sort -t: -k2 -nr cat /etc/passwd |sort -t: -k3 -n uniq:命令:從輸入中刪除前後相接的重覆的行 uniq [OPTION]... [FILE]... -c: 顯示每行重覆出現的次數 -d: 僅顯示重覆過的行 -u: 僅顯示不曾重覆的行 連續且完全相同方為重覆 常和sort 命令一起配合使用: sort userlist.txt | uniq -c [root@instructor_v6(nanyibo) html]# cat /var/log/httpd/access_log |cut -d" " -f1 |sort |uniq -c |sort -n -r |head 180 172.18.118.136 102 172.18.118.108 72 192.168.20.1 71 172.18.118.133 70 172.18.118.117 67 172.18.118.127 59 172.18.118.99 58 172.18.118.116 55 172.18.118.94 54 172.18.118.152 diff 和 patch:比較兩個文件之間的區別   diff f1 f2: 比較兩個文件f1 ,f2之間的區別 diff -u oldfile newfile > file.patch   sed   用法: sed [option]... 'script' inputfile... 常用選項: -n:不輸出模式空間內容到屏幕,即不自動列印 -e: 多點編輯 -f:/PATH/SCRIPT_FILE: 從指定文件中讀取編輯腳本 -r: 支持使用擴展正則表達式 -i.bak: 備份文件並原處編輯 script:'地址命令 地址定界: (1) 不給地址:對全文進行處理 (2) 單地址: #: 指定的行,$:最後一行 /pattern/:被此處模式所能夠匹配到的每一行 (3) 地址範圍: #,# #,+# /pat1/,/pat2/ #,/pat1/ (4) ~:步進 1~2 奇數行 2~2 偶數行   編輯命令: d: 刪除模式空間匹配的行,並立即啟用下一輪迴圈 p:列印當前模式空間內容,追加到預設輸出之後 a [\]text:在指定行後面追加文本 支持使用\n實現多行追加 i [\]text:在行前面插入文本 c [\]text:替換行為單行或多行文本 w /path/somefile: 保存模式匹配的行至指定文件 r /path/somefile:讀取指定文件的文本至模式空間中 匹配到的行後 =: 為模式空間中的行列印行號 !:模式空間中匹配行取反處理 替換 s///:查找替換,支持使用其它分隔符,s@@@,s### 替換標記: g: 行內全局替換 p: 顯示替換成功的行 w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中   高級編輯命令 P:列印模式空間開端至\n內容,並追加到預設輸出之前 h: 把模式空間中的內容覆蓋至保持空間中 H:把模式空間中的內容追加至保持空間中 g: 從保持空間取出數據覆蓋至模式空間 G:從保持空間取出內容追加至模式空間 x: 把模式空間中的內容與保持空間中的內容進行互換 n: 讀取匹配到的行的下一行覆蓋至模式空間 N:讀取匹配到的行的下一行追加至模式空間 d: 刪除模式空間中的行 D:如果模式空間包含換行符,則刪除直到第一個換行符的模式空間中的文本, 並不會讀取新的輸入行,而使用合成的模式空間重新啟動迴圈。如果模式空間 不包含換行符,則會像發出d命令那樣啟動正常的新迴圈   實例:   seq 1 5 |sed 2d ifconfig |sed -n '2p' cat pets |sed "2a\hello\n123" cat pets |sed "2ihello\n123" cat pets |sed "2chello\n123" cat /app/pets |sed '1,3w /app/pet.1' cat -n /app/pets |sed '2r /app/pet.1' seq 1 5 |sed -n '2!p' 高級用法   seq 1 10 |sed -n 'n;p' 僅列印偶數行 seq 1 10|sed -n '2~2p' 2 4 6 8 10 [root@instructor_v7(nanyibo) ~]# seq 1 10|sed '1!G;h;$!d' 倒序顯示 [root@instructor_v7(nanyibo) ~]# seq 1 10|sed 'N;D' 列印最後一行 [root@instructor_v7(nanyibo) ~]# seq 1 10|sed '$!N;$!D' 列印最後兩行 [root@instructor_v7(nanyibo) ~]# seq 1 10|sed '$!d' 列印最後一行 [root@instructor_v7(nanyibo) ~]# seq 1 10|sed 'G' 每一行後加一個空行 [root@instructor_v7(nanyibo) ~]# seq 1 10|sed 'g' 將所有行變為空行 [root@instructor_v7(nanyibo) ~]# cat seq10 |sed '/^$/d;G' 將多空行變為一個空 行,沒有空行的加一個空行 [root@instructor_v7(nanyibo) ~]# seq 1 10 |sed 'n;d' 只列印奇數行 [root@instructor_v7(nanyibo) ~]# seq 1 10 |sed -n '1!G;h;$p' 倒序列印 sed -e '/^#NameVirtual/s/#//' 文件中的開頭的#去掉 sed -e '/^#NameVirtual/s/#//' -e '^#<VirtualHost/,/^#<VirtualHost/s/#//' /etc/httpd/conf/httpd.conf 去掉文件中開頭的# sed -r 's/(.*)/magedu\1/' /etc/passwd 把這個文件的頭一個字母替換為。。   用sed取IP地址:ifconfig |sed -n '2p' | sed -r 's@.*inet(.*) net.*@\1@' 192.168.30.110 ifconfig | sed -r '2!d;s@(.*inet)(.*)( net.*)@\2@'   ifconfig |sed -n '2p' |sed 's/.*inet //' |sed 's/ netmask.*//'   sed -e '/^#NameVirtual/s/#//' 文件中的開頭的#去掉 sed -e '/^#NameVirtual/s/#//' -e '^#<VirtualHost/,/^#<VirtualHost/s/#//' /etc/httpd/conf/httpd.conf 去掉文件中開頭的#   seq 1 10 |sed -n 'n;p' 只顯示偶數 seq 1 10 |sed -n '2~2p' seq 1 10 |tac tac表示倒敘排數字 seq 1 10 |sed 'N;D' 倒敘排取得的第一個數字 [root@centos7 ~]# seq 1 10 |sed '$!N;$!D' 9 10 sed -r 's/(.*)/magedu\1/' /etc/passwd 把這個文件的頭一個字母替換為。   實例: sed ‘2p’ /etc/passwd sed –n ‘2p’ /etc/passwd sed –n ‘1,4p’ /etc/passwd sed –n ‘/root/p’ /etc/passwd sed –n ‘2,/root/p’ /etc/passwd 從2行開始 sed -n ‘/^$/=’ file 顯示空行行號 sed –n –e ‘/^$/p’ –e ‘/^$/=’ file sed ‘/root/a\superman’ /etc/passwd行後 sed ‘/root/i\superman’ /etc/passwd 行前 sed ‘/root/c\superman’ /etc/passwd 代替行   sed ‘/^$/d’ file sed ‘1,10d’ file nl /etc/passwd | sed ‘2,5d’ nl /etc/passwd | sed ‘2a tea’ sed 's/test/mytest/g' example sed –n ‘s/root/&superman/p’ /etc/passwd 單詞後 sed –n ‘s/root/superman&/p’ /etc/passwd 單詞前 sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets sed –i.bak ‘s/dog/cat/g’ pets     grep: 文本過濾(模式:pattern)工具 grep, egrep, fgrep(不支持正則表達式搜索) 模式:由正則表達式字元及文本字元所編寫的過濾條件 sed:stream editor,文本編輯工具 awk:Linux上的實現gawk,文本報告生成器 grep +參數+匹配內容+文件 --color=auto 關鍵字高亮顯示,在centos7當中預設做為別名,對匹配到的文本著色顯示 \ 轉義 一次 [.]放到括弧里表示.本身 -v 顯示不被匹配到的行 -i 忽略關鍵字的大小寫 -c 顯示匹配行的數量 -o 僅顯示匹配到的關鍵字 -q 靜默輸出,不列印過濾的結果,也可以用 &> /dev/null -A x 當前行及後x行 -B x 當前行及前x行 -C x 當前行及前後x行 nmap -v -sP 172.18.118.0/24 |grep -B1 'Host is up' |grep for |cut -d" " -f5 -e 關鍵字1 -e 關鍵字2 或者 "關鍵字1\|關鍵字2" 表示邏輯或 -w 匹配整個單詞 表示字元邊界 也可以用 "\<關鍵字\>" -E 或 egrep 表示使用擴展正則表達式 -F 或 fgrep 不使用正則表達式     正則表達式:   程式支持:grep,sed,awk,vim, less,nginx,varnish man 7 regex 文件名通配符當中 * 表示 0或多個任意字元 ? 表示任何一個單一字元 . 表示任何字元 [] 匹配指定範圍內的任意單個字元 [^] 匹配指定範圍外的任意單個字元 [:alnum:] 字母和數字 [:alpha:] 代表任何英文大小寫字元,亦即 A-Z, a-z [:lower:] 小寫字母 [a-z] [:upper:] 大寫字母 [A-Z] [:blank:] 空白字元(空格和製表符) [:space:] 水平和垂直的空白字元(比[:blank:]包含的範圍廣) [:cntrl:] 不可列印的控制字元(退格、刪除、警鈴...) [:digit:] 十進位數字 [0-9] [:xdigit:]十六進位數字 [:graph:] 可列印的非空白字元 [:print:] 可列印字元 [:punct:] 標點符號 [A-Z0-9] 表示大寫字元或數字   次數匹配   匹配次數:用在要指定次數的字元後面,用於指定前面的字元要出現的次數 * 匹配前面的字元任意次,包括0次 貪婪模式:儘可能長的匹配 .* 任意長度的任意字元 \? 匹配其前面的字元0或1次 \+ 匹配其前面的字元至少1次 \{n\} 匹配前面的字元n次 \{m,n\} 匹配前面的字元至少m次,至多n次 \{,n\} 匹配前面的字元至多n次 \{n,\} 匹配前面的字元至少n次   位置錨定:定位出現的位置 ^ 行首錨定,用於模式的最左側 $ 行尾錨定,用於模式的最右側 ^PATTERN$ 用於模式匹配整行 ^$ 空行 ^[[:space:]]*$ 空白行 grep -v "^[[:space:]]*$" passwd 去除文件中的空白行 \< 或 \b 詞首錨定,用於單詞模式的左側 \> 或 \b 詞尾錨定;用於單詞模式的右側 \<PATTERN\> 匹配整個單詞 grep "\<root\>" passwd   分組   分組:\(\) 將一個或多個字元捆綁在一起,當作一個整體進行處理,如:\(root\)\+ 分組括弧中的模式匹配到的內容會被正則表達式引擎記錄於內部的變數中,這些變數的命 名方式為: \1, \2, \3, ... \1 表示從左側起第一個左括弧以及與之匹配右括弧之間的模式所匹配到的字 示例: \(string1\+\(string2\)*\) \1 :string1\+\(string2\)* \2 :string2 後向引用:引用前面的分組括弧中的模式所匹配字元,而非模式本身 或者:\| 示例:a\|b: a或b C\|cat: C或cat \(C\|c\)at:Cat或cat   實驗:通過以下文件,找出以rxxt開頭且以相同rxxt結尾,並uid與gid相同的用戶 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin rcct:x:1:1:bin:/bin:/sbin/rcct daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin roat:x:4:7:lp:/var/spool/lpd:/sbin/roat sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:Root:/sbin:/sbin/shutdown roat:x:6:0:Root:/sbin:/sbin/root halt:x:7:0:halt:/sbin:rooter:/halt rbbt:x:8:12:mail:/var/spool/mail:/sbin/root operator:x:11:0:operator:/root1:/sbin/root root:x:100:100:games:/usr/games:/sbin/root ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin   cat passwd |grep "^\(\<r..t\>\).*\([0-9]\+\):\2.*\1$"     擴展正則表達式的元字元:egrep = grep -e 字元匹配: .任意單個字元
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 以下是列印滑鼠左右鍵及其他輸入的源代碼,詳細說明見https://www.cnblogs.com/zhu-g5may/p/9309381.html ...
  • 墨菲定律 墨菲定律:一種心理學效應,是由愛德華·墨菲(Edward A. Murphy)提出的, 原話:如果有兩種或兩種以上的方式去做某件事情,而其中一種選擇方式將導 致災難,則必定有人會做出這種選擇 主要內容: 任何事都沒有錶面看起來那麼簡單 所有的事都會比你預計的時間長 會出錯的事總會出錯 如果 ...
  • 簡介 Linux 上常用的壓縮/解壓工具,介紹了zip、rar、tar的使用。 文件打包和壓縮 Linux 上的壓縮包文件格式,除了 Windows 最常見的*.zip、*.rar、.7z 尾碼的壓縮文件,還有 .gz、.xz、.bz2、.tar、.tar.gz、.tar.xz、tar.bz2 1 ...
  • 計劃任務 為什麼要設置計劃任務 我們在系統的管理中,很多時候不是及時的去操作,比如對某一網站數據的備份,備份的過程需要占用大量的系統資源,凌晨三四點的時候系統訪問用戶最少,系統最空閑。但我們的系統的系統管理員總不能老那個時間爬起來操作吧。 計劃任務的命令 計劃命令分一次性計劃和周期性計劃。at 安排 ...
  • 1. 定義usb支持的設備類型: 當插入的USB設備為該類型的USB時,內核就會調用probe函數。註意要把這個數組寫進設備表裡面: 2. probe函數 2.1 從介面獲得設備,然後列印設備信息: 2.2 在此之前定義結構體: 3. 將結構體註冊進內核: 3.1使用一句話: 3.2 當然也可以使用 ...
  • 1:web網路服務:訪問互聯網時如淘寶,電商後都有web伺服器,傳統公司apache,互聯網公司一般用 web伺服器 2:網路的特性 速度:帶寬 成本 安全性 可用性:系統的正常運行時間 / 總時間(正常+異常)的百分比。cluster(集群)可實現高可用性 可擴展性:模塊化 可靠性 拓撲:1匯流排拓 ...
  • 一、組件方式檢查 1. Master節點: root>> kubectl get cs 2. Node 節點: 無 二、服務方式檢查 root>> kubectl get cs 2. Node 節點: 無 2. Node 節點: 無 二、服務方式檢查 1. Master 節點: root>> sys ...
  • 包管理器 程式包管理器: 功能:將編譯好的應用程式的各組成文件打包一個或幾個程式包文件,從而 方便快捷地實現程式包的安裝、卸載、查詢、升級和校驗等管理操作 包文件組成 (每個包獨有) RPM包內的文件 RPM的元數據,如名稱,版本,依賴性,描述等 安裝或卸載時運行的腳本 資料庫(公共):/var/l ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...