shell三劍客

了解三劍客

三劍客指的是: grep、sed和awk這三個在linux系統中常用的命令行工具

shell三劍客

grep: 主要用于查找和過濾特定文本

sed:是一個流編輯器,可以對文本進行增刪改查

awk:是一個文本處理工具,適合對列進行處理和分析。它不僅可以進行查找和替換,還能執行數學計算和數據統計

shell三劍客試用場景

1.日志處理與搜索:使用grep 搜索關鍵詞,結合sed和awk進行進一步處理和分析

2.配置文件管理: 使用sed和awk進行批量修改、添加、或刪除配置項。

3.數據提取和轉換:利用awk提取、分析和轉換結構化文本數據,處理CSV、JSON等格式

4.監控與報警:使用grep、sed和awk提取關鍵信息生成監控報告,監控系統狀態和性能

5.日常運維任務:自動化任務如查找過期文件、清理日志、統計日志大小等。

6.系統管理:使用sed和awk處理系統狀態信息,如用戶信息、進程信息、磁盤使用情況等。

shell三劍客之grep指令

基本語法:grep 選項 內容 文件

記住:都是常見一些選項

支持的正則描述
-E,--extended-regexp模式是擴展正則表達式(ERE) => 字符簇、()、|或
-P,--perl-regexp模式是Perl正則表達式 => \d、\w、\s
-i,--ignore-case忽略大小寫
-w,--word-regexp模式匹配整個單詞
-v,--invert-match打印不匹配的行(取反)

了解:能記住最好,記不住,作為了解,使用的時候查看文檔!

輸出控制描述
-n,--line-number打印行號
-o,--only-matching只打印匹配的內容
-r,--recursive遞歸目錄
-c,--count統計匹配行數

練習

準備數據集

# vim demo.txt
Hello, this is an example file.
It contains some lines of text.
Let's use grep to search for specific patterns.

在文件中搜索包含單詞 "example" 的行

grep "example" demo.txt

shell三劍客之sed指令

語法格式:sed? 【選項】 ?? 【sed命令】 ? ? 【輸入文件】?

說明:

① 注意sed軟件以及后面選項,sed命令和輸入文件,每個元素之間都至少有一個空格。

② 為了避免混淆,筆記中稱呼sed為sed軟件。sed -commands(sed命令)是sed軟件內置的一些命令選項,為了和前面的options(選項)區分,故稱為sed命令

③ sed -commands 既可以是單個sed命令,也可以是多個sed命令組合。

④ input -file (輸入文件)是可選項,sed還能夠從標準輸入如管道獲取輸入。

sed軟件有兩個內置的存儲空間:

☆ 模式空間(pattern space):是sed軟件從文本讀取一行文本然后存入的緩沖區(這個緩沖區是在內存中的),然后使用sed命令操作模式空間的內容。

☆ 保持空間(hold space):是sed軟件另外一個緩沖區,用來存放臨時數據,也是在內存中,但是模式空間和保持空間的用途是不一樣的。sed可以交換保持空間和模式空間的數據(一般都是將保持空間的數據,拿到模式空間進行操作),但是不能在保持空間上執行普通的sed命令,也就是說我們可以在保持空間存儲數據。

模式空間:臨時存放數據,然后通過sed命令進行加工處理,處理完成后,打印到屏幕,然后清空模式空間

保持空間:存儲數據(以后我們操作一行文本的時候,真的所有的時候都只能一行一行操作嗎?答:有的時候會對多行內容進行操作,當然你對內容進行多行操作的時候,就可以把數據放在 保持空間)

sed選項說明

記住常用的三個選項:

option[選項]解釋說明(帶*的為重點)
-n取消默認的sed軟件的輸出,常與sed命令的p連用*
-r使用擴展正則表達式(grep -E),默認情況sed只識別基本正則表達式*
-i直接修改文件內容,而不是輸出到終端,如果不使用-i選項sed軟件只是修改在內存(模式空間)中的數據,并不會影響磁盤上的文件*

記住幾個常用:

sed -commands解釋說明(帶*的為重點)
aappend追加,在指定行后添加一行或多行文本*
cchange,取代指定的行
ddelete,刪除指定的行*
iinsert插入,在指定行前添加一行或多行文本*
pprint,打印模式空間內容,通常p會與選項-n一起使用*
q退出sed
r從指定文件讀取數據
s取代,s#old#new#g==>這里g是s命令的替代標志,注意和g命令區分。*

重點記住:增刪改查操作 => 增加a、刪除d、修改c或s、查詢p

sed添加操作

# cat >person.txt<<EOF
101,Tom,CEO
102,Rose,CTO
103,Alex,COO
104,Jack,CFO
105,Jennifer,CIO
EOF
?
命令說明:使用一條cat命令創建多行文本,文件包含上面的內容,后面的操作都會使用這個文件。

單行操作

sed '2a 106,Smith,CSO' person.txt
注:
2代表指定對第2行操作,其他的行忽略;
a代表追加的意思,2a即在第2行后追加文本;
2a后面加上空格,然后跟上你想要插入的多行文本即可。這里的每行文本使用"\n"連接就可以寫成一行了。

注意:以上2a也可以調整為2i,代表在第2行的前面添加一行

多行操作

sed '2a 106,Eric,CSO\n107,Susan,CCO' person.txt
注:\n代表換行符

sed默認操作文件內容是在內存中的模式空間中進行實現,不會影響原文件內容。

增加操作有兩種方式(行號 + i,指定行前面添加內容),(行號 + a,指定行后面添加內容)

如果希望增加操作影響原文件,可以添加一個選項-i

sed刪除操作(記住d)

刪除指定行文本。

注意:建議刪除的時候 使用 單引號

案例1:下面用具體的例子演示一下sed刪除操作實現

# sed 'd' person.txt
命令說明:如果在sed命令前面不指定地址范圍,那么默認會匹配所有行,然后使用d命令刪除功能就會刪除這個文件的所有內容

案例2:

# sed '2d' person.txt
命令說明:這個單行刪除想必大家能理解,指定刪除第2行的文本

案例3:

# sed '2,5d' person.txt
命令說明:'2,5d' 指定刪除第2行到第5行的內容,d代表刪除操作。

案例4:

sed '/Jack/d' person.txt
命令說明:在sed軟件中,使用正則的格式和awk一樣,使用2個"/"包含指定的正則表達式,即"/正則表達式/"。

案例5:

# sed '/Tom/,/Alex/d' person.txt
命令說明:這是正則表達式形式的多行刪除,也是以逗號分隔2個地址,最后結果是刪除包含"Tom"的行到包含"Alex"的行

案例6:

# sed '3,$d' person.txt
命令說明:學過正則表達式后我們知道"$"代表行尾,但是在sed中就有一些變化了,"$"在sed中代表文件的最后一行。因此本例子的含義是刪除第3行到最后一行的文本,包含第3行和最后一行,因此剩下第1,2行的內容。

案例7:在最后一行,追加 內容

# sed '$a 106,Tom,CSO' person.txt
命令說明:為了不造成同學們實驗文本改來改去導致不同意,因此我用上面的命令語句只是臨時修改內存數據,然后通過管道符號傳給sed軟件。

小結:

sed軟件不僅可以添加數據行,也可以刪除數據行,刪除數據行必須使用(d)命令

sed刪除軟件 => (sed '范圍d' 文件)=> 默認都是在內存中完成,需要影響原文件,則添加一個-i

sed匹配原則,匹配內容 + d,如3,5d :刪除從第三行-第五行的內容

sed修改操作(重點,要記住c和s)

c:change縮寫,替換指定行,以行為單位

s : s/舊的內容/替換后內容/g 或 s#舊的內容#替換后內容#g,以關鍵詞為單位

注意:不建議使用 /,建議使用 #,因為,/ 容易 混淆,比如說,我的內容中就有 /,如果要替換了,那是不是要加,轉移字符\/

為什么使用#作為標識符,因為如果文件路徑的替換,/root、/etc,剛好與邊界符號沖突了


sed修改操作,我們最常見的操作就是改配置文件,改參數等等 首先說一下按行替換,這個功能用的很少,所以大家了解即可。這里用到的sed命令是:"c":用新行取代舊行,記憶方法:c的全拼是change,意思是替換。

sed查詢操作(記住-n+p)

sed命令:

"p":輸出指定內容,但默認會輸出2次匹配的結果,因此使用-n選項取消默認輸出,記憶方法:p的全拼是print,意思是打印。

Shell三劍客之awk指令

awk格式

awk指令是由模式動作,或者模式和動作的組合組成。

可以理解為:我們的模式和動作選項中,可以 只有模式(意味著,你要所有的內容),也可以只有動作,也可以有 模式+動作

模式既pattern,可以類似理解成sed的模式匹配,可以由表達式組成,也可以是兩個正斜杠之間的正則表達式。比如NR==1,這就是模式,可以把他理解為一個條件

動作即action,是由在大括號里面的一條或多條語句組成,語句之間使用分號隔開。

options既參數,使用最多的參數為-F(Field,用于指定字段與字段之間的分隔符,列與列之間的分隔符,默認為空格)

pattern既模式,也可以理解為條件,也叫找誰,你找誰?高矮,胖瘦,男女?都是條件,既模式。

action既動作,可以理解為干啥,找到人之后你要做什么。

注意:awk -F"分隔符" '模式和動作' file

-F后面跟是雙引號,模式和動作要使用單引號進行包裹!!!

基本模式與動作

# awk -F ":" 'NR>=2 && NR<=6{print NR,$1}' /etc/passwd
2 bin
3 daemon
4 adm
5 lp
6 sync
?
命令說明:
-F 指定分隔符為冒號,相當于以“:”為菜刀,進行字段的切割。
NR>=2 && NR<=6:這部分表示模式,是一個條件,表示取第2行到第6行。
{print NR,$1}:這部分表示動作,表示要輸出NR行號和$1第一列。
$1代表第1列
$2代表第2列
依次類推

NR == Number(數字、號碼)+ Record(記錄、行)== 行號

awk執行過程

解析:

① awk讀入第一行內容

② 判斷是否符合模式中的條件NR>=2

如果匹配則執行對應的動作{print $0}

如果不匹配條件,繼續讀取下一行

③ 繼續讀取下一行

④ 重復過程1-3,直到讀取到最后一行(EOF:end of file)

awk記錄(行)

名稱含義
record記錄,行 => NR(Number Record)行號
field域,區域,字段,列 => NF(Number Field)列號,$NF代表最后一列

awk默認情況下每一行都是一個記錄(record)

① RS既record separator輸入輸出數據記錄分隔符,每一行是怎么沒的,表示每個記錄輸入的時候的分隔符,既行與行之間如何分隔,默認為\n,可以調整為其他字符。

② NR既number of record 記錄(行)號,表示當前正在處理的記錄(行)的號碼。

③ ORS既output record separator 輸出記錄分隔符。

awk使用內置變量RS來存放輸入記錄(行與行)分隔符,RS表示的是輸入的記錄分隔符,這個值可以通過BEGIN模塊重新定義修改。

NR:行號,打印行號

NF:NF代表列號,如果前面添加了$,則代表最后一列

$0:整行內容

awk字段(列)

每條記錄都是由多個區域(field)組成的,默認情況下區域之間的分隔符是由空格(即空格或制表符)來分隔,并且將分隔符記錄在內置變量FS中,每行記錄的區域數保存在awk的內置變量NF中。

awk分隔符

如果采用默認分隔符,切割內容,如果左邊有一大批空白內容,則默認分隔符會自動忽略此內容。

如果采用人為設定分隔符,切割內容,如果左邊有一大批空白內容,則人為設定的分隔符會對這塊內容進行切割。

awk模式與動作進階

awk模式與動作

接下來就詳細介紹下,awk的模式都有幾種:

☆ 正則表達式作為模式

☆ 比較表達式作為模式 NR>=2

☆ 范圍模式 NR>=2 && NR <= 5

☆ 特殊模式BEGIN和END

BEGIN模式與END模式

BEGIN模塊在awk讀取文件之前就執行,一般用來定義我們的內置變量(預定義變量,eg:FS,RS),可以輸出表頭(類似excel表格名稱)

BEGIN模式之前我們有在示例中提到,自定義變量,給內容變量賦值等,都使用過。需要注意的是BEGIN模式后面要接跟一個action操作塊,包含在大括號內。awk必須在輸入文件進行任何處理前先執行BEGIN里的動作(action)。我們可以不要任何輸入文件,就可以對BEGIN模塊進行測試,因為awk需要先執行完BEGIN模式,才對輸入文件做處理。BEGIN模式常常被用來修改內置變量ORS,RS,FS,OFS等值

數據集:

# cat /server/files/awkfile.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

BEGIN模塊完整寫法:BEGIN{}

# awk -F: 'BEGIN{print "username","UID"}{print $1,$3}' awkfile.txt
username UID ?#這就是輸出的表頭信息
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
uucp 10

☆ END模式

作用:與BEGIN相呼應,在awk處理文件結束后,會自動觸發END模塊(只會觸發1次)

基本語法:

awk '動作 END{print xxx}'

應用場景說明: awk執行結束,用于實現收尾操作 ① 數學計算中,輸出最終結果 ② 輸出最后一行等等

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84882.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84882.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84882.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

創客匠人視角:知識IP變現的主流模式與創新路徑

知識IP變現賽道正從“野蠻生長”走向“精細化運營”&#xff0c;如何在流量紅利消退期實現可持續變現&#xff1f;創客匠人基于服務數萬職業教育IP的實踐經驗&#xff0c;總結出一套兼顧效率與長尾價值的變現邏輯&#xff0c;為行業提供了可參考的路徑。 主流變現模式&#x…

【嵌入式人工智能產品開發實戰】(二十三)—— 政安晨:將小智AI代碼中的display與ota部分移除

政安晨的個人主頁&#xff1a;政安晨 歡迎 &#x1f44d;點贊?評論?收藏 希望政安晨的博客能夠對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出指正&#xff01; 目錄 本篇目標 第一步 ? 修改說明 &#x1f527; 修改后的代碼節選 &#x1f4cc; 總…

從sdp開始到webrtc的通信過程

1. SDP 1.1 SDP的關鍵點 SDP&#xff08;Session Description Protocol&#xff09;通過分層、分類的屬性字段&#xff0c;結構化描述實時通信會話的 會話基礎、網絡連接、媒體能力、安全策略、傳輸優化 等核心信息&#xff0c;每個模塊承擔特定功能&#xff1a; 1. 會話級別…

PHP、Apache環境中部署sqli-labs

初始化數據庫的時候&#xff0c;連接不上 檢查配置文件里面的數據庫IP、用戶名、密碼是否正確 mysqli_connect函數報錯 注意要下載兼容PHP7的sqli-labs版本 1、下載sqli-labs工程 從預習資料中下載。 文件名&#xff1a;sqli_labs_sqli-for7.zip 2、配置數據庫 把下載好的…

Spring AI Alibaba Graph 實踐

本文中將闡述下 AI 流程編排框架和 Spring AI Alibaba Graph 以及如何使用。 1. Agent 智能體 結合 Google 和 Authropic 對 Agent 的定義&#xff1a;Agent 的定義為&#xff1a;智能體&#xff08;Agent&#xff09;是能夠獨立運行&#xff0c;感知和理解現實世界并使用工具…

Server 11 ,?通過腳本在全新 Ubuntu 系統中安裝 Nginx 環境,安裝到指定目錄( 腳本安裝Nginx )

目錄 前言 一、準備工作 1.1 系統要求 1.2 創建目錄 1.3 創建粘貼 1.4 授權腳本 1.5 執行腳本 1.6 安裝完成 二、實際部署 2.1 賦予權限 2.2 粘貼文件 2.3 重啟服務 三、腳本解析 步驟 1: 安裝編譯依賴 步驟 2: 創建安裝目錄 步驟 3: 下載解壓源碼 步驟 4: 配置…

層壓板選擇、信號完整性和其他權衡

關于印刷電路材料&#xff0c;我有很多話要說&#xff0c;我覺得這非常有趣&#xff0c;而且所有候選人都帶有“材料”這個詞。無論出現在頂部的東西都是我最終選擇的。我實際上會描述決策過程&#xff0c;因為我認為這很有趣&#xff0c;但首先要強調將我帶到這里的職業旅程。…

幾種經典排序算法的C++實現

以下是幾種經典排序算法的C實現&#xff0c;包含冒泡排序、選擇排序、插入排序、快速排序和歸并排序&#xff1a; #include <iostream> #include <vector> using namespace std;// 1. 冒泡排序 void bubbleSort(vector<int>& arr) {int n arr.size();f…

[學習] 多項濾波器在信號插值和抽取中的應用:原理、實現與仿真(完整仿真代碼)

多項濾波器在信號插值和抽取中的應用&#xff1a;原理、實現與仿真 文章目錄 多項濾波器在信號插值和抽取中的應用&#xff1a;原理、實現與仿真引言 第一部分&#xff1a;原理詳解1.1 信號插值中的原理1.2 信號抽取中的原理1.3 多項濾波器的通用原理 第二部分&#xff1a;實現…

Linux中source和bash的區別

在Linux中&#xff0c;source和bash&#xff08;或sh&#xff09;都是用于執行Shell腳本的命令&#xff0c;但它們在執行方式和作用域上有顯著區別&#xff1a; 1. 執行方式 bash script.sh&#xff08;或sh script.sh&#xff09; 啟動一個新的子Shell進程來執行腳本。腳本中的…

解決文明6 內存相關內容報錯EXCEPTION_ACCESS_VIOLATION

我裝了很多Mod&#xff0c;大約五六十個&#xff0c;經常出現內存讀寫異常的報錯。為了這個問題&#xff0c;我非常痛苦&#xff0c;已經在全球各大論壇查詢了好幾周&#xff0c;終于在下方的steam評論區發現了靠譜的解答討論區。 https://steamcommunity.com/app/289070/dis…

IIS 實現 HTTPS:OpenSSL證書生成與配置完整指南

參考 IIS7使用自簽名證書搭建https站點(內網外網都可用) windows利用OpenSSL生成證書,并加入IIS 親測有效 !!! IIS 配置自簽名證書 參考:IIS7使用自簽名證書搭建https站點(內網外網都可用) 親測可行性,不成功。 IIS 配置OpenSSL 證書 √ OpenSSL 下載 https://slp…

Spark DAG、Stage 劃分與 Task 調度底層原理深度剖析

Spark DAG、Stage 劃分與 Task 調度底層原理深度剖析 核心知識點詳解 1. DAG (Directed Acyclic Graph) 的構建過程回顧 Spark 應用程序的執行始于 RDD 的創建和一系列的轉換操作 (Transformations)。這些轉換操作&#xff08;如 map(), filter(), reduceByKey() 等&#xff…

關于阿里云-云消息隊列MQTT的連接和使用,以及SpringBoot的集成使用

一、目的 本文主要記錄物聯網設備接入MQTT以及對接服務端SpringBoot整個的交互流程和使用。 二、概念 2.1什么是MQTT? MQTT是基于TCP/IP協議棧構建的異步通信消息協議&#xff0c;是一種輕量級的發布、訂閱信息傳輸協議。可以在不可靠的網絡環境中進行擴展&#xff0c;適用…

車載功能框架 --- 整車安全策略

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 簡單,單純,喜歡獨處,獨來獨往,不易合同頻過著接地氣的生活,除了生存溫飽問題之外,沒有什么過多的欲望,表面看起來很高冷,內心熱情,如果你身…

HarmonyOS5 讓 React Native 應用支持 HarmonyOS 分布式能力:跨設備組件開發指南

以下是 HarmonyOS 5 與 React Native 融合實現跨設備組件的完整開發指南&#xff0c;綜合關鍵技術與實操步驟&#xff1a; 一、分布式能力核心架構 React Native JS 層 → Native 橋接層 → HarmonyOS 分布式能力層(JavaScript) (ArkTS封裝) (設備發現/數據同步/硬件…

Unity打包到微信小程序的問題

GUI Error: Invalid GUILayout state in FlowchartWindow view. Verify that all layout Begin/End calls match UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&) 第一個問題可以不用管&#xff0c;這個不影響&#xff0c;這個錯誤&#xff0c;但是可以正常運行&a…

Hugging face 和 魔搭

都是知名的模型平臺&#xff0c;二者在定位、功能、生態等方面存在區別&#xff0c;具體如下&#xff1a; 一、定位與背景 Hugging Face&#xff1a; 定位是以自然語言處理&#xff08;NLP&#xff09;為核心發展起來的開源模型平臺&#xff0c;后續逐步拓展到文本、音頻、圖…

React 第六十一節 Router 中 createMemoryRouter的使用詳解及案例注意事項

前言 createMemoryRouter 是 React Router 提供的一種特殊路由器,它將路由狀態存儲在內存中而不是瀏覽器的 URL 地址欄中。 這種路由方式特別適用于測試、非瀏覽器環境(如 React Native)以及需要完全控制路由歷史的場景。 一、createMemoryRouter 的主要用途 測試環境:在…

透視黃金窗口:中國有機雜糧的高質量躍遷路徑

一、行業概覽&#xff1a;藍海市場背后的結構性紅利 伴隨全民健康意識提升和中產階層的擴大&#xff0c;中國有機雜糧市場正迎來新一輪結構性紅利期。根據《健康中國3.0時代&#xff1a;粗糧食品消費新趨勢與市場增長極》數據顯示&#xff0c;2020 年中國有機雜糧市場規模約 3…