自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用 awk + grep + sed 搞定日志處理神器組合拳

運(yùn)維
Linux三劍客指的是grep、sed和awk這三個(gè)強(qiáng)大的文本處理工具。它們各自具有獨(dú)特的功能和優(yōu)勢(shì),能夠滿足不同的文本處理需求。

今天分享一下三劍客:grep,sed,awk。

一、Linux三劍客簡介

Linux三劍客指的是grep、sed和awk這三個(gè)強(qiáng)大的文本處理工具。

grep偏向于文本搜索,sed專注于文本編輯操作,awk則提供更精細(xì)的過濾處理功能。

它們各自具有獨(dú)特的功能和優(yōu)勢(shì),能夠滿足不同的文本處理需求。掌握這些工具的使用,可以極大提高工作和學(xué)習(xí)的效率。

二、grep:搜索之劍詳解

1. grep簡介

grep 是一個(gè)強(qiáng)大的命令行工具,用于在文本文件中搜索指定的模式。它能使用特定模式匹配(包括正則表達(dá)式)搜索文本,并默認(rèn)輸出匹配行。

需要注意的是,grep會(huì)將匹配到的整行輸出,而awk可以指定某一行某一列進(jìn)行輸出。

主要應(yīng)用場(chǎng)景有:日志分析和文本處理,grep可以從日志文件中找出錯(cuò)誤信息或特定事件,也用于從大量文本文件中提取特定信息

2. 工作原理

grep進(jìn)行文本搜索時(shí)主要進(jìn)行以下三步:

  • 輸入處理:grep 從指定的文件或標(biāo)準(zhǔn)輸入中逐行讀取數(shù)據(jù),檢查每行是否與用戶提供的模式匹配。
  • 模式匹配:grep 采用正則表達(dá)式進(jìn)行模式匹配,根據(jù)規(guī)則檢查每一行是否符合條件。
  • 輸出結(jié)果:當(dāng)某行匹配成功時(shí),grep 會(huì)將該行輸出

3. 語法和可選項(xiàng)

(1) 基本語法

grep [options] pattern [file...]
  • options:可選參數(shù),用來控制搜索的方式、輸出格式等,下面會(huì)進(jìn)行詳細(xì)講解
  • pattern:必填項(xiàng),是要搜索的模式或正則表達(dá)式,用于匹配文件中的內(nèi)容
  • file: 是要搜索的文件名或目錄,可以是多個(gè)

(2) 可選項(xiàng)參數(shù)

選項(xiàng)

描述

-E

使用擴(kuò)展正則表達(dá)式,grep -E 等同于egrep

-i

忽略大小寫

-r

遞歸搜索某個(gè)目錄下所有文件

-v

反向匹配,輸出不匹配的行

-n

顯示行號(hào)

-c

顯示匹配行的總數(shù),而不是打印匹配行。

-A n

輸出匹配的后n行

-B n

輸出匹配的前n行

-C n

打印匹配前后的n行

-L

列出未包含匹配項(xiàng)的文件名

-o

只顯示匹配到的字符串本身,而不是整個(gè)行

-w

精確匹配整詞,防止匹配到包含該單詞的部分詞匯

4. 實(shí)戰(zhàn)操作

(1)-i選項(xiàng):忽略大小寫

# 打印處日志文件中所有包含error字符的,不論大小寫
grep -i error /var/log/message

(2)-r選項(xiàng):遞歸查詢

# 輸出/etc/nginx/conf.d目錄所有關(guān)于www字符的行,常用查找域名或端口信息
grep -ir /etc/nginx/conf.d

(3)-E選項(xiàng):支持?jǐn)U展正則表達(dá)式 (4)-v選項(xiàng):反向匹配

# 過濾某個(gè)文件的所有空行和帶#號(hào)注釋的行
grep -Ev '^#|^$'  /etc/nginx.conf

(4)-n選項(xiàng):顯示行號(hào)

# 找出包含root和ssh字符的行號(hào)
grep -En 'root|ssh' /etc/passwd

(5)-l選項(xiàng):查找文件名

# 查找文件包含root字符的文件名
grep -l root *

(6)-A選項(xiàng):查找后面幾個(gè)字符

(7)-B選線:查找前面幾個(gè)字符

(8)-C選擇:查找前后幾個(gè)字符

# 查找有錯(cuò)誤的后面3行信息
grep -iA 3 error /var/log/messages
# 查找有錯(cuò)誤的前面3行信息
grep -iB 3 error /var/log/messages
# 查找有錯(cuò)誤的上下3行信息
grep -iC 3 error /var/log/messages

三、sed:編輯之劍詳解

1. sed簡介

sed是編輯之劍:一個(gè)流編輯器,它允許用戶在文件中進(jìn)行文本替換、刪除、添加等操作。sed支持基礎(chǔ)和擴(kuò)展的正則表達(dá)式,并提供了豐富的文本處理功能,如替換命令、地址定界等。sed的強(qiáng)大之處在于它可以非交互式地編輯文件或標(biāo)準(zhǔn)輸入,使其成為自動(dòng)化文本處理的理想選擇。

應(yīng)用場(chǎng)景有:批量替換,文本處理,通過sed命令可以快速替換文件中的特定字符串,如配置文件的修改;在shell腳本中結(jié)合其他命令如grep、awk等,實(shí)現(xiàn)復(fù)雜的文本處理任務(wù)

2. 工作原理

sed的工作流程包括讀取、執(zhí)行和顯示三個(gè)主要過程。

它會(huì)從輸入流中讀取一行內(nèi)容并存儲(chǔ)到臨時(shí)緩沖區(qū)(模式空間),然后根據(jù)設(shè)定的命令在模式空間中執(zhí)行編輯操作,最后將處理后的內(nèi)容輸出到標(biāo)準(zhǔn)輸出

3. 語法、選項(xiàng)和動(dòng)作介紹

(1)基本語法

sed [option] 'sed command' file

(2)常用選項(xiàng)

選項(xiàng)

描述

-n

只打印匹配處理的行,不修改文件

-e

允許多個(gè)編輯命令同時(shí)執(zhí)行

-f

從腳本文件中讀取并執(zhí)行sed命令

-i

直接修改文件內(nèi)容

-r

支持?jǐn)U展正則表達(dá)式

(3)常用動(dòng)作

動(dòng)作

描述

p

打印模式空間的內(nèi)容

a

在當(dāng)前行后追加內(nèi)容

i

在當(dāng)前行前插入內(nèi)容

c

用新文本替換模式空間中的內(nèi)容

d

刪除模式空間中的內(nèi)容

s

替換內(nèi)容

4. 實(shí)戰(zhàn)操作

sed可以做增刪改查操作,接下來分別演示。

復(fù)制/etc/passwd文件到/opt下,以/opt/passwd來做測(cè)試操作

cp /etc/passwd /opt/passwd

(1)增加操作

主要有兩個(gè)動(dòng)作指令:a是追加內(nèi)容到指定行后面,i是插入內(nèi)容到指定行前面

# 在第2行后面追加內(nèi)容
# 注意:這樣只是打印出來,并沒有修改文件里面的內(nèi)容,如果要修改,需加-i參數(shù)
sed '1a 123' /opt/passwd 

# 在第一行前面插入內(nèi)容,加-i后文件真實(shí)改變
sed -i '1i 456'  /opt/passwd

# 在最后一行后面追加內(nèi)容
sed '$a 789' /opt/passwd

(2)刪除操作

# 刪除第一行
sed '1d'  /opt/passwd 

# 刪除2-4行
sed '2,4d'  /opt/passwd

# 將匹配的行進(jìn)行刪除
sed '/\/bin\/bash/d' /opt/passwd

# 刪除以root開頭的行
sed '/^root/d' /opt/passwd

# 刪除文中的空行和注釋
sed -e '/^#/d' -e '/^$/d' /opt/passwd

(3)更改操作

s是用于替換操作的,日常中最為常用,配合g使用,可以替換全部匹配到的內(nèi)容

# 替換常用模板,也可以將#改為/
sed -i 's#目標(biāo)內(nèi)容#替換內(nèi)容#g' file

# 常用于修改selinux的命令
sed -i 'sy#=enforcing#=disabled#g' /etc/selinux/config

# 將nologin替換成login
sed 's/nologin/login/g' /opt/passwd

# 以mail開頭的行,將該行所有的mail替換為gmail
sed '/^mail/{s#mail#gmail#g}' /opt/passwd

(4)查找操作

# 只打印第三行內(nèi)容
sed -n '3p'  /opt/passwd

四、awk:過濾之劍

1. awk簡介

awk是一個(gè)編程語言工具,主要用于處理數(shù)據(jù)和生成報(bào)告。它能夠按行和列分析文本文件,并對(duì)符合條件的數(shù)據(jù)執(zhí)行操作,數(shù)據(jù)可以來自標(biāo)準(zhǔn)輸入也可以是管道或文件。awk特別適合于處理結(jié)構(gòu)化的文本數(shù)據(jù),如日志文件、CSV文件等

2. 工作原理

awk的工作原理可以分為三個(gè)主要部分:BEGIN塊、主循環(huán)體和END塊。

BEGIN塊中的代碼在處理任何輸入行之前執(zhí)行,且只執(zhí)行一次。它通常用于初始化變量或打印表頭信息;

主循環(huán)體是awk的核心部分,逐行讀取輸入文件并對(duì)每行進(jìn)行處理。它會(huì)按指定的分隔符(默認(rèn)為空格或制表符)將每行分割成字段,并存入內(nèi)建變量中;

END塊中的代碼在所有輸入行處理完畢后執(zhí)行,且只執(zhí)行一次。常用于輸出最終結(jié)果或總結(jié)信息

注意:在使用awk時(shí)不一定要每個(gè)部分都出現(xiàn),根據(jù)實(shí)際處理需求來使用哪個(gè)部分。

具體的工作流程分為以下三步:

  • 讀(Read):從文件、管道或標(biāo)準(zhǔn)輸入中讀入一行然后把它存放到內(nèi)存中
  • 執(zhí)行(Execute):對(duì)每一行數(shù)據(jù),根據(jù) AWK 命令按順序執(zhí)行。默認(rèn)情況是處理每一行數(shù)據(jù),也可以指定模式
  • 重復(fù)(Repeat):一直重復(fù)上述兩個(gè)過程直到文件結(jié)束

3. 語法參數(shù)

(1)基礎(chǔ)語法 awk指令是由模式,動(dòng)作,或者模式和動(dòng)作的組合組成。

awk [options] 'pattern {action}' file

(2)可選項(xiàng)

選項(xiàng)

描述

-F <分隔符>

用于指定輸入字段的分隔符,默認(rèn)是空格,可以使用逗號(hào),冒號(hào)等

-v <變量名>=<值>

用于定義一個(gè)變量并賦值

-f <腳本文件>

用于從指定的腳本文件中讀取awk命令,適用于awk指令較復(fù)雜場(chǎng)景

-r <擴(kuò)展正則表達(dá)式>

用于啟用擴(kuò)展正則表達(dá)式模式匹配功能

-s

用于禁用自動(dòng)換行功能,使得awk在輸出時(shí)不會(huì)自動(dòng)換行

-c <命令>

用于執(zhí)行單個(gè)awk命令而不是從文件讀取

(3)內(nèi)置變量

變量

描述

NF

表示當(dāng)前記錄的字段數(shù)量

NR

表示已讀的記錄數(shù)(即行號(hào))

FS

表示輸入字段分隔符,默認(rèn)為空格或制表符

OFS

表示輸出字段分隔符

RS

表示輸入記錄分隔符,默認(rèn)為換行符

$0

當(dāng)前處理的行的整行內(nèi)容

$n

當(dāng)前處理行的第n個(gè)字段(第n列)

4. 實(shí)戰(zhàn)操作

awk操作也是用/opt/passwd文件演示

(1)輸出全文內(nèi)容并附帶行號(hào)

awk '{print NR,$0}' /opt/passwd

(2)只打印第五行

awk 'NR==2{print}'

(3)以: 為分隔符,打印第一列

awk -F ":" '{print $1}'  /opt/passwd

(4)以: 為分隔符,打印第2列和最后一列

awk -F ":" '{print $2,$NF}' /opt/passwd

(5)打印以:和/ 為分隔符且包含root的行的列數(shù)

awk -F ":/" '/root/{print NF}' /opt/passwd

(6)打印以:為分隔符包含root的行數(shù)和整行內(nèi)容

awk -F ":/" '/root/{print NR,$0}' /opt/passwd

(7)格式化定制

[root@localhost ~]# awk -F ":" '{print "第"NR"行有"NF"列"}' /opt/passwd
第1行有1列
第2行有7列
第3行有7列
第4行有7列

生產(chǎn)環(huán)境BEGIN和END部分并不怎么常用,就不展開舉例了

五、總結(jié)

Linux三劍客是任何Linux用戶或系統(tǒng)管理員必須掌握的工具。無論是簡單的文本搜索、數(shù)據(jù)提取還是復(fù)雜的文本處理任務(wù),這些工具都能提供強(qiáng)大的支持。

責(zé)任編輯:趙寧寧 來源: 運(yùn)維李哥不背鍋
相關(guān)推薦

2019-08-20 14:29:45

grepsedawk

2017-03-31 14:05:26

Linux正則表達(dá)式基礎(chǔ)知識(shí)

2020-12-09 10:32:24

日志監(jiān)控日志

2023-12-10 21:35:45

Linux服務(wù)器日志分析

2009-12-11 15:37:58

Linux日志處理

2025-04-28 10:13:03

JavaScript數(shù)組代碼

2021-03-15 07:39:48

LinuxAwk 語言

2011-10-31 09:26:07

惠普轉(zhuǎn)型云計(jì)算

2014-07-06 14:05:22

IBMWebSphere數(shù)字經(jīng)濟(jì)

2024-11-25 12:00:00

C#日志記錄器

2011-09-26 11:28:51

信息防泄漏溢信科技

2021-07-02 10:10:55

SecurityJWT系統(tǒng)

2015-10-20 19:08:28

華三通信

2011-09-18 14:27:58

2021-05-13 10:25:29

Linuxgrep命令

2023-12-13 13:26:41

2024-05-06 08:56:31

PythonHTML正則表達(dá)式

2025-02-10 08:10:00

Linuxsed命令

2021-09-10 16:30:29

LinuxShell文本

2017-03-02 18:10:20

LinuxShell命令
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)