下面所說的是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全部替換為abcsed -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...