Linux三劍客是Linux系統(tǒng)中最重要的三個命令,它們以其強大的功能和廣泛的應(yīng)用場景而聞名。這三個工具的組合使用幾乎可以完美應(yīng)對Shell中的數(shù)據(jù)分析場景,因此被統(tǒng)稱為Linux三劍客。
1、grep
grep是一個強大的文本搜索工具,用于在文件內(nèi)容中查找指定的字符串,并將匹配到的行輸出到標準輸出。grep命令支持多種選項和模式匹配,使得在文件中搜索特定內(nèi)容變得非常靈活和高效。
文本搜索命令;
命令格式為:
grep "搜索的字符串" 文件名
1)基礎(chǔ)
參數(shù):
-c:統(tǒng)計出現(xiàn)的次數(shù)
-i:不區(qū)分大小寫
-n:輸出行號
2)實例
統(tǒng)計出現(xiàn)的次數(shù)
grep -c "xx" text.log
2、sed
sed是一個流編輯器,主要用于對輸入流(或文件)進行基本的文本轉(zhuǎn)換。它可以用來查找、新增、刪除和修改替換文本中的數(shù)據(jù)。sed命令的強大之處在于它可以對文本進行非交互式的編輯,從而提高了處理大量文本的效率。
1)基本概念
sed是一種流編輯器,它是文本處理工具,支持正則表達式,通過一行一行的遍歷,執(zhí)行相應(yīng)的命令,來處理、編輯文本文件。
(1)語法
sed [選項] ‘command’ 文件名稱
選項部分,常見選項包括-n,-e,-i,-f,-r選項。
command部分包括:[地址1,地址2] [函數(shù)] [參數(shù)(標記)]
(2)命令格式為:
sed [-nefri] '命令' 文本 cat 文本 | sed [-nefr] '命令' echo '.....' |sed [-nefr] '命令'
2)選項(nefri)
(1)選項-n
sed默認會把模式空間處理完畢后的內(nèi)容輸出到標準輸出,也就是輸出到屏幕上,加上-n選項后被設(shè)定為安靜模式,也就是不會輸出默認打印信息,除非子命令中特別指定打印選項,則只會把匹配修改的行進行打印。
(2)選項-e
如果需要用sed對文本內(nèi)容進行多種操作,則需要執(zhí)行多條子命令來進行操作。
(3)選項-i
sed默認會把輸入行讀取到模式空間,簡單理解就是一個內(nèi)存緩沖區(qū),sed子命令處理的內(nèi)容是模式空間中的內(nèi)容,而非直接處理文件內(nèi)容。因此在sed修改模式空間內(nèi)容之后,并非直接寫入修改輸入文件,而是打印輸出到標準輸出。如果需要修改輸入文件,那么就可以指定-i選項。
(4)選項-f
還記得 -e 選項可以來執(zhí)行多個子命令操作,用分號分隔多個命令操作也是可以的,如果命令操作比較多的時候就會比較麻煩,這時候把多個子命令操作寫入腳本文件,然后使用 -f 選項來指定該腳本。
(5)選項-r
sed命令的匹配模式支持正則表達式的,默認只能支持基本正則表達式,如果需要支持擴展正則表達式,那么需要添加-r選項。
3)命令(acdipynNs)
a新增,c取代,d刪除,i插入,p打印,y將字符轉(zhuǎn)成另一個字符等
[root@localhost sed]# cat message 1a 2b 3c 4d 5e 6f abcdABCD
(1)a
子命令a表示在指定行下邊插入指定行的內(nèi)容。
#將message文件中每一行下邊都插入添加一行內(nèi)容是A sed 'a A' message #將message文件中1-2行的下邊插入添加一行內(nèi)容是A sed '1,2a A' message #將message文件中1-2行的下邊分別添加3行,3行內(nèi)容分別是A、B、C,這里使用了 ,插入多行內(nèi)容都可以按照這種方式來實現(xiàn)。 sed '1,2a A B C' message
(2)i
子命令i和a使用上基本上一樣,只不過是在指定行上邊插入指定行的內(nèi)容。
#將message文件中每一行上邊都插入添加一行內(nèi)容是A sed 'i A' message #將message文件中1-2行的上邊插入添加一行內(nèi)容是A sed '1,2i A' message #將message文件中1-2行的上邊分別添加3行,3行內(nèi)容分別是A、B、C,這里使用了 ,插入多行內(nèi)容都可以按照這種方式來實現(xiàn) sed '1,2i A B C' message
(3)c
子命令c是表示把指定的行內(nèi)容替換為自己需要的行內(nèi)容。
#將message文件中所有的行內(nèi)容都分別替換為A行內(nèi)容 sed 'c A' message #將message文件中1-2行的內(nèi)容替換為A,注意這里說的是將1-2行所有的內(nèi)容只替換為一個A內(nèi)容,也就是1-2行內(nèi)容變成了一行,定址如果連續(xù)就是這種情況 sed '1,2c A' message #將message中1-2行內(nèi)容分別替換為了A,需要在替換內(nèi)容上手動加換行 ,這樣當然也可以將一行內(nèi)容替換為多行內(nèi)容 sed '1,2c A A' message
(4)d
子命令d表示刪除指定的行內(nèi)容,比較簡單,更容易理解。
#將message所有行全部刪除,因為沒有加定址表達式,所以平時如果需要刪除指定行內(nèi)容,需要在子命令前加定址表達式 sed 'd' message #將message文件中1-3行內(nèi)容刪除 sed '1,2d' message
(5)y
子命令y表示字符替換,可以替換多個字符,只能替換字符不能替換字符串,且不支持正則表達式,
#把message中所有a字符替換為A符號,所有b字符替換為B符號 sed 'y/aB/Ab/' message
(6)=
子命令=,可以將行號打印出來。
#將指定行的上邊顯示行號 sed '1,2=' message
(7)r
子命令r,類似于a,也是將內(nèi)容追加到指定行的后邊,只不過r是將指定文件內(nèi)容讀取并追加到指定行下邊。
#將r.txt文件內(nèi)容讀取并插入到message文件第1行的下邊 sed '1r r.txt' message
(8)s
子命令s為替換子命令,是平時sed使用的最多的子命令,沒有之一。因為支持正則表達式,功能變得強大無比,下邊來詳細地說說子命令s的使用方法。
基本語法:
[address]s/pattern/replacement/flags
flags
flags | 說明 |
---|---|
n | 可以是1-512,表示第n次出現(xiàn)的情況進行替換 |
g | 全局更改 |
p | 打印模式空間的內(nèi)容 |
w file | 寫入到一個文件file中 |
#b全局換成x sed 's/b/x/g' message
4)實例
(1)test.txt的第一行前插入“a new line”
sed -i '1ia new line' text.txt
(2)在第三行新增一行
sed -i '3a a new line' text
3、awk
awk是一個文本處理工具,用于對文本或數(shù)據(jù)進行模式掃描和處理。它可以根據(jù)定位到的數(shù)據(jù)行處理其中的分段,并進行數(shù)據(jù)切片或執(zhí)行其他操作。awk命令非常適合進行數(shù)據(jù)提取和報告生成等任務(wù),是Linux系統(tǒng)中進行文本和數(shù)據(jù)處理的利器。
1)基本概念
awk是結(jié)構(gòu)化數(shù)據(jù)處理程序;
awk是一門數(shù)處理領(lǐng)域的語言;
awk擁有c語言式的語法結(jié)構(gòu),例如print是語句,但不是函數(shù);
(1)語法
awk [選項] '匹配規(guī)則和處理規(guī)則 ' [處理文本路徑]
匹配規(guī)則主要是:正則表達式、字符串
處理規(guī)則主要是:設(shè)置變量、設(shè)置數(shù)組、定義函數(shù)(用的比較少)、數(shù)組循環(huán)、加減乘除運算、字符串拼接
(2)命令格式為:
awk [選項] 'BEGIN{定義1;定義2;}/模式/{操作1;操作2}END{操作1;操作2}' file1 file2
選項:如-F:指定分隔符為:
BEGIN{} : BEGIN是在awk處理文本之前運行
/模式/ : 使用的匹配規(guī)則,模式為正則或者字符串
{} :循環(huán)(每次只處理一行數(shù)據(jù)),如{print $1}打印第一列
END{} :當所有的處理全部執(zhí)行完畢之后,執(zhí)行END中的相關(guān)操作
2)操作符:~、==、!=、>等
如:
#當前行匹配以a開頭成功時則執(zhí)行后面的打印 awk '/^a/ {print $1}'
上面正則匹配的范圍是整行的內(nèi)容,如果只想匹配指定字段的內(nèi)容,則可以這樣使用:
awk '$n~/^1/ {print $1}'
通過~符號規(guī)定了正則的匹配操作范圍【這里是字段n】,~叫做匹配操作符
3)BEGIN和AND:
BEGIN里面可以打印一些字符串,或者定義變量(變量名="值" ,值不是數(shù)字的話,必須要用雙引號括起來,引用變量的時候,變量前面是不要加$的)。
END里面可以打印一些字符串,或者進行最終的計算。如果在BEGIN里面沒有定義變量的話,最終也可以引用這個變量的,只是變量值為空,在awk里面變量是可以不預先定義;
4)選項
參數(shù) | 解釋 |
---|---|
-F | 指定分割字段符 |
-v | 定義或修改一個awk內(nèi)部的變量 |
-f | 從腳本文件中讀取awk命令 |
5)常見變量:
內(nèi)置變量 | 解釋 |
---|---|
FS | 默認輸入列分隔符(空格和tab) |
OFS | 默認輸出列分隔符(空格) |
NF | 每行有幾段(列)(print $NF代表打印最后一列) |
RS | 默認輸入行分隔符( ) |
ORS | 默認輸出行分隔符( ) |
FILENAME | 當前所操作文件名稱 |
NR | 讀取每行時當前的行號(對于合并文件來說,不同文件行號連續(xù)顯示) |
FNR | 讀取每行時顯示當前的行號(對于合并文件來說,不同文件行號不連續(xù)顯示) |
$0:表示當前整行,$1表示第一個字段,$2表示第二個字段,$n 表示第n個字段;
6)判斷:
7)實例
(1)默認分隔符是空格和tab,打印第二列
ps |awk '{print $2}'
(2)分隔符是冒號,打印第一、二列,并用空格分隔
awk -F ":" '{print $1,$2}' /etc/passwd
(3)分隔符是冒號,打印第一、二列,并用指定符號分隔
awk -F ":" '{print $1"--"$2}' /etc/passwd
(4)分隔符是冒號和逗號,打印第一、二列,并用指定符號分隔
awk -F "[:,]" '{print $1"--"$2}' /etc/passwd
(5)默認分隔符,打印以d開頭的行的第一列
docker ps |awk '/^d/ {print $1}'
(6)默認分隔符,打印第n列以d開頭的行的第一列
docker ps |awk '$n~/^d/ {print $1}'
(7)在打印前指定分隔符變量FS為冒號和逗號
awk 'BEGIN{FS="[:,]"}{print $1}' /etc/passwd
(8)在打印前指定分隔符變量FS為冒號和逗號,定義變量line
awk 'BEGIN{FS="[:,]";line=1}{print $line}' /etc/passwd
(9)定義變量sum計算和,每次輸出計算結(jié)果,最終輸出
awk 'BEGIN{FS="[,:]";sum=0}{sum+=$3;print sum}END{print "sum=",sum}' /etc/passwd
(10)打印當前文件名稱
awk '{pring FILENAME}' /etc/passwd
鏈接:https://www.cnblogs.com/hoaprox/p/18269422
-
Linux
+關(guān)注
關(guān)注
87文章
11420瀏覽量
212319 -
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
601瀏覽量
28161 -
字符串
+關(guān)注
關(guān)注
1文章
589瀏覽量
20991 -
命令
+關(guān)注
關(guān)注
5文章
722瀏覽量
22631
原文標題:揭秘大廠高效秘籍:掌握Linux三劍客
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
成功電源設(shè)計,布局是其中最重要一個環(huán)節(jié)
Linux中如何使用less、more和most命令
示波器最重要的三個參數(shù)

非常高效三個linux shell命令分享
Linux系統(tǒng)命令指南
Linux必學的系統(tǒng)安全命令
Linux教程之常用Linux命令的詳細資料免費下載
電源布局是其中最重要的一個環(huán)節(jié)

EMC三個重要規(guī)律
嵌入式Linux開發(fā)教程:Linux常見命令(上篇)

評論