文本處理工具之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
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...