linux命令列統計行數 Linux三劍客

2021-10-19 05:50:22 字數 3992 閱讀 5372

下面所說的是linux中最重要的三個命令在業界被稱為「三劍客」,它們是awk,sed,grep。

我們現在知道linux下一切皆檔案,對linux的操作就是對檔案的處理,那麼怎麼能更好的處理檔案呢?這就要用到我們上面的三劍客命令。

三劍客的功能非常強大,但我們只需要掌握他們分別擅長的領域即可:grep擅長查詢功能,sed擅長取行和替換。awk擅長取列。grep1.分類grep命令家族由grep, egrep, fgrep 三個子命令組成,適用於不同的場景。具體如下:

grep 原生的grep命令,使用「標準正規表示式」作為匹配標準。

egrep 擴充套件的grep命令,相當於$(grep -e),使用「擴充套件正規表示式」作為匹配標準。

fgrep 簡化版的grep命令,不支援正規表示式,但搜尋速度快,系統資源使用率低。

pgrep檢視當前正在執行的程序,並將與選擇條件匹配的程序id列出到stdout(螢幕)。當你想要某個程序的pid時,pgrep很方便。

2.使用方法

語法

grep [options] pattern [file...]

options部分

-i:忽略大小寫

--color:高亮匹配上的字串

-v: 顯示沒有被模式匹配到的行

file部分

需要查詢內容的檔案。

3.舉例

1).查詢指定程序和個數

[root@vm-0-12-centos ~]# ps -ef | grep redisroot      7934  7859  0 11:00 pts/0    00:00:00 grep --color=auto redispolkitd  21437 21421  0 sep22 ?        00:10:02 redis-server 127.0.0.1:6379
2).統計2023年9月29日 pv量

grep '29/sep/2020' text.txt | wc -l
3).過濾ip位址

egrep -o "([0-9]\.)[0-9]"
sed1.概述sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行儲存在臨時緩衝區中,稱為「模式空間」(pattern space),接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。然後讀入下行,執行下乙個迴圈。如果沒有使諸如『d』 的特殊命令,那會在兩個迴圈之間清空模式空間,但不會清空保留空間。這樣不斷重複,直到檔案末尾。檔案內容並沒有改變,除非你使用重定向儲存輸出。

2.基本語法

sed [option] 'script' [input file]...

option部分

-n:不輸出模式空間中的內容到stdout

-r:支援使用擴充套件的正則

script部分/pattern/:指定模式匹配到的那一行

#,/pattern/

/pattern1/,/pattern2/

1~2:以1為起始行,然後遞進2行向下匹配

d:刪除整行,d放在最後

p:顯示模式空間中的內容, 放在最後

a:在匹配的行後面增加文字,使用\n支援多行追加。a放在定界後面

i:在前面加文字。舉例:sed '3i hello' ***

c:替換行為指定的文字。舉例:sed '3c text' *** 把第三行替換成text。sed -i '/xyz/c helloworld' num.txt

w:儲存模式空間中匹配的內容到指定位置。舉例:sed -n '/[#]/w /tmp/demo' /etc/fstab 將/etc/fstab中非#開頭的行儲存到/tmp/demo中。

r:讀取指定檔案的內容新增到當前檔案匹配到的行後面,進行檔案合併。

s///:條件替換。

替換標記備註:g(全域性替換),p(顯示替換成功的行)3.舉例1).列印指定的行數

sed -n 2p text.txt # 列印第二行的內容sed -n 5,9p text.txt # 列印第五行到第九行的內容
2).將檔案中的root全部替換為abc
sed -i 's/root/adb/g' text.txt
awk1.概述awk是乙個報表生成器,主要用於格式化輸出。格式化文字輸出器。

2.基本語法語法

gawk [option] 'program' file

其中program: pattern

可以理解成為命令,最常用的是print、printf

awk讀取文件過程按照行來讀取文件,根據輸入分隔符切分成小部分(用內建變數來表示$0$1$2...),用action statements來處理。$0表示顯示整行。選項option-f:指名輸入欄位的分隔符;

-v:用來實現自定義變數var=value;pattern(用於定界)空:

表示處理檔案的每一行

/ pattern/:

使用正則匹配需要處理的行

!/pattern/:

上面取反

關係表示式:

結果為真假,結果為真的處理,假的不處理。

非0非空字串為真,其餘為假。

行定界:不支援直接給出數字的格式(1,2)。

begin/end模式:begin{}表示僅在開始處理檔案中的文字之前執行一次的程式,例如列印表頭。end{}表示文字處理完成之後執行一次。

變數內建變數

(在引用變數時不用加$)

fs: input field seperator:

輸入字段分隔符,預設空白字元。

使用-v指定。

ofs: 輸出字段分隔符。

使用-v指定。

r s

: 輸入時的換行符

ors: 輸出時的換行符

nf: number of field 每一行的字段數量。

加上$nf表示最後一列

nr: number of record 檔案的行數,列印出來是列印行號

fnr: 多個檔案中的行數分別計數

filename

: 當前檔案的檔名

argc

: 引數命令列中引數的個數

a r**

: 返回陣列,命令列中的每個引數

3.舉例

1).統計2023年9月29日一天內訪問最多的10個ip

awk '/29\/sep\/2020/ end}' text.txt | sort -k2rn | head -10
2).統計2023年9月29日一天內訪問大於100次的ip

awk '/29\/sep\/2020/ end }}' text.txt

在windows cmd命令列中使用linux命令

本文的核心思想是使用別人已經編譯好的linux命令的windows版本可執行檔案 本文的重點是一些小bug的處理辦法 這一步是為了獲取git中附帶的linux命令的windows版本 為了方便使用,寫了乙個小小的c程式,自動新增 color auto以及臨時環境變數lang zh cn includ...

mysql命令列資料匯出

匯出指定sql的內容 mysql h host p 3306 u user p password n default character set utf8 e select from test database test.txt 引數說明 h指定資料庫ip位址 p指定埠號 u指定使用者名稱 p指定密...

Linux命令列基礎 常用的命令列

符號 符號含義 使用者目錄 也稱作家目錄 根路徑,即整個系統 所在當前目錄 當前目錄的上一級目錄 提示可以輸入命令列了 回車 carriage return 執行輸入的命令列 絕對路徑 開頭的路徑就是絕對路徑,不是這種開頭的就是相對路徑。命令列命令列的英文全寫 中文含義 pwdprint worki...