正則表達式與文本三劍客grep、sed、awk

目錄

一、正則表達式

1.1、字符匹配

1.2、次數匹配

1.3、位置錨定

1.4、分組或其他

二、擴展正則表達式

三、grep

四、awk

4.1、常用命令選項

4.2、工作原理

?4.3、基礎用法

4.4、內置變量

4.5、模式

4.6、條件判斷

4.7、awk中的循環語句

4.8、數組

4.9、腳本

五、sed

5.1、sed腳本格式

?5.2、sed命令

5.3、搜索替換

5.4、分組后向引用


一、正則表達式

正則表達式,又稱規則表達式。(英語:Regular Expression),在代碼中常簡寫為 regex、regexp 或 RE),計算機科學的一個概念。正則表達式通常被用來檢索、替換那些符合某個模式(規則)的文本。
正則表達式不只有一種,而且linux中不同的程序可能會使用不同的正則表達式,如:grep sed awk egrep?

LINUX 中常用的有兩種正則表達式引擎:

  • 基礎正則表達式:BRE
  • 擴展正則表達式: ERE

通配符與正則表達式的區別:

  • 通配符一般用于文件名匹配
  • 正則表達式一般用于匹配文件內容
1.1、字符匹配
元字符定義
.匹配除換行符\n之外的任意單個字符
[? ?]匹配中括號內任意單個字符
[^ ]匹配除中括號內任意單個字符
[:alnum:]數字和字母
[:alpha:]任意大小寫英文字符
[:lower:]小寫字母
[:upper:]大寫字母
[:blank:]空白字符(空格和制表符)
[:space:]空格、制表符、換行符、回車符等空白
[:cntrl:]不可打印的控制字符(退格、刪除、警鈴等)
[:digit:]十進制數字
[:xdigit:]十六進制數字
[:graph:]可打印的非空白字符
[:print:]可打印字符
[:punct:]標點符號
\w匹配單詞?
\W
\s
\S
1.2、次數匹配
元字符定義
*匹配前面字符人任意次,包括0次
.*任意長度的任意字符,不包括0次
\?匹配前面字符出現0次或1次
\+前面字符出現最少1次
\{n\}匹配前面字符n次
\{m,n\}匹配前面字符最少m次,最多n次
\{,n\}匹配前面字符最多n次,≤n
\{n,\}匹配前面字符最少n次
1.3、位置錨定
元字符定義
^行首錨定,用于模式最左側
$行尾錨定,用于模式最右側
^PATTTERN$匹配整行
^$空行,不包括空格行
^[:space:]*$空白行
\b,\<詞首錨定,用于模式最左側
\b,\>詞尾錨定,用于模式最右側
1.4、分組或其他
元字符定義
(????????)分組,將多個字符作為一個整體
(x\|y)由左向右匹配指定字符

二、擴展正則表達式

通常情況下會使用基礎正則表達式就已經足夠了,但有時為了簡化整個指令,需要使用 ?范圍更廣的擴展正則表達式。

#次數匹配
*            #前面任意字符
?            #0或1次
+            #1次以上
{n}          #匹配n次
{m,n}        #最少m次,最多n次
{,n}         #前面字符最多n次,≤n
{n,}         #前面字符最少n次
#分組匹配
()           #多個字符當作整體處理
\1,\2,...    #向后引用
|            #或

三、grep

語法格式:grep 參數 文件名

常用參數:

-m<x>找到x行后停止查找
-v取反
-i忽略大小寫
-n顯示行號
-c統計行數
-o僅顯示匹配到的字符
-q

靜默模式,不輸出任何信息

-A<x>顯示匹配行,及之后的x行
-B顯示匹配行,及之前的x行
-C顯示匹配行,及前后x行
-e多個選項間的邏輯或
-E使用擴展正則表達式
-w只顯示全字符合的列
-F不使用正則表達式
-f處理兩個文件相同內容,以第一個文件為匹配條件
-r遞歸目錄,不處理軟鏈接
-R遞歸目錄,處理軟連接

--color=auto

高亮匹配字符

參考示例

#輸出除之外的所有行 -v 選項
grep -v "match_pattern" file_name#標記匹配顏色 --color=auto 選項
grep "match_pattern" file_name --color=auto#使用正則表達式 -E 選項:
grep -E "[1-9]+"
egrep "[1-9]+"#選項 -e 制動多個匹配樣式:
echo this is a text line | grep -e "is" -e "line" -o
is
is
line#在多級目錄中對文本進行遞歸搜索:
grep "text" . -r -n
# .表示當前目錄。#忽略匹配樣式中的字符大小寫:
echo "hello world" | grep -i "HELLO"
# hello

四、awk

awk命令來自三位創始人Alfred Aho、Peter Weinberger、Brian Kernighan的姓氏縮寫,用于在linux/unix下對文本和數據進行處理。數據可以來自標準輸入(stdin)、一個或多個文件,或其它命令的輸出。

它支持用戶自定義函數和動態正則表達式等先進功能,是linux/unix下的一個強大編程工具。它在命令行中使用,但更多是作為腳本來使用。awk有很多內建的功能,比如數組、函數等,這是它和C語言的相同之處,靈活性是awk最大的優勢。

語法格式:awk [選項] -f '腳本'/腳本文件 '模式{處理動作}'

4.1、常用命令選項
  • -F fs?fs指定輸入分隔符,fs可以是字符串或正則表達式,如-F:,默認的分隔符是連續的空格或制表符
  • -v var=value?賦值一個用戶定義變量,將外部變量傳遞給awk
  • -f scripfile?從腳本文件中讀取awk命令
  • -m[fr] val?對val值設置內在限制,-mf選項限制分配給val的最大塊數目;-mr選項限制記錄的最大數目。這兩個功能是Bell實驗室版awk的擴展功能,在標準awk中不適用。
4.2、工作原理
  • 第一步:執行 BEGIN {commands} 語句塊中的語句;
  • 第二步:從文件或標準輸入(stdin)讀取一行,然后執行 pattern {commands} 語句塊,它逐行掃描文件,從第一行到最后一行重復這個過程,直到文件全部被讀取完畢。
  • 第三步:當讀至輸入流末尾時,執行 END {commands} 語句塊。

BEGIN語句塊:在awk開始從輸入流中讀取行?之前?被執行,這是一個可選的語句塊,比如變量初始化、打印輸出表格的表頭等語句通常可以寫在BEGIN語句塊中。

END語句塊:在awk從輸入流中讀取完所有的行?之后?即被執行,比如打印所有行的分析結果這類信息匯總都是在END語句塊中完成,它也是一個可選語句塊。

pattern語句塊:中的通用命令是最重要的部分,它也是可選的。如果沒有提供pattern語句塊,則默認執行{print},即打印每一個讀取到的行,awk讀取的每一行都會執行該語句塊。

?4.3、基礎用法

awk '模式{處理動作}'

#BGEIN{}模式
[root@localhost ~]# awk '{print}'
1
1
aabb
aabb
^C
[root@localhost ~]# awk '{print "aabb"}'
1
aabb#提取磁盤的分區利用率
[root@localhost ~]# df |awk '{print $5}'
已用%
0%
0%
2%
0%
80%
19%
1%
80%
0%#提取用戶名和uid號
[root@localhost ~]# cat /etc/passwd |awk -F: '{print $1,$3}'
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
..............#提取ip地址
[root@localhost ~]# ifconfig ens33 |awk 'NR==2{print $2}'
192.168.153.23
4.4、內置變量
變量定義
FS字段分隔符(默認空格)
OFS輸出字段分隔符(默認空格)
NF字段數,執行過程中對應當前字段數
NR記錄數,執行過程中對應當前行號
$0當前處理的行的整行內容
$n當前處理行的第n個字段/列
FILENAME當前輸入的文件名
RS記錄分隔符(默認一個換行符)

參考示例

#FS變量的使用,-F優先級高于FS變量
[root@localhost ~]# awk -v "FS=:" '{print $1FS$3}' /etc/passwd
root:0
bin:1
daemon:2
[root@localhost ~]# awk -F: '{print $1":"$3}' /etc/passwd
root:0
bin:1
daemon:2#OFS變量的使用,替換分隔符
[root@localhost ~]# cat /etc/passwd|awk -v "OFS=--" -F: '{print $1,$3}'|head -n3
root--0
bin--1
daemon--2
[root@localhost ~]# cat /etc/passwd|awk -v "OFS=--" -v "FS=:" '{print $1,$3}'|head -n3
root--0
bin--1
daemon--2#RS變量的使用,替換分隔符為換行符
[root@localhost ~]# echo $PATH|awk -v "RS=:" '{print}'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin#NF變量的使用,顯示最后一列
[root@localhost ~]# df |awk '{print $NF}'
掛載點
/dev
/dev/shm
/run
/sys/fs/cgroup
/
/boot
/run/user/42
/var/lib/docker/overlay2/b3191762ed94dc8a583e6da75d8db197b583d63c7f925833df49e5b51e865a4f/merged
/run/user/0
[root@localhost ~]# df |awk '{print $(NF-1)}'
已用%
0%
0%
2%
0%
80%
19%
1%
80%
0%#NR變量的使用,匹配對應行
[root@localhost ~]# cat /etc/passwd |head -n3|awk '{print NR,$0}'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost ~]# cat /etc/passwd|awk 'NR==1,NR==3{print NR,$0}'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost ~]# cat /etc/passwd|head -n8|awk '(NR%2)==0{print NR,$0}'
2 bin:x:1:1:bin:/bin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
8 halt:x:7:0:halt:/sbin:/sbin/halt
4.5、模式

awk [選項] '模式{處理動作}'

#/正則表達式/:使用通配符的擴展集。
#匹配從root開頭,ftp結尾的行
[root@localhost ~]# awk -F: '/^root/,/^ftp/{print $1,$3}' /etc/passwd
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
games 12
ftp 14
#僅匹配root開頭,ftp開頭的行
[root@localhost ~]# awk -F: '/^root/||/^ftp/{print $1,$3}' /etc/passwd
root 0
ftp 14
#關系表達式,使用運算符進行操作,可以是字符串或數字的比較測試
#n++表示不匹配第一行,即NR!=1
[root@localhost ~]# ss -natp|awk 'n++{print $1}'|sort|uniq -c1 ESTAB12 LISTEN
[root@localhost ~]# ss -natp|awk 'n++{a[$1]++}END{for(i in a){print a[i],i}}'
12 LISTEN
1 ESTAB[root@localhost ~]# seq 4|awk 'i=!i'
1
3
[root@localhost ~]# seq 4|awk '!(i=!i)'
2
4
[root@localhost ~]# seq 4|awk -v i=1 'i=!i'
2
4
4.6、條件判斷

awk ?選項 ? '模式 {條件|執行動作}'?

#過濾用戶名及uid
[root@localhost ~]# cat /etc/passwd|awk -F: '{if($3>1000)print $1,$3}'
nfsnobody 65534
[root@localhost ~]# cat /etc/passwd|awk -F: '$3>1000{print $1,$3}'
nfsnobody 65534
[root@localhost ~]# cat /etc/passwd|awk -F: '{if($3>=uid){uid=$3;user=$1;sh=$NF}}END{print user,uid,sh}'
nfsnobody 65534 /sbin/nologin
4.7、awk中的循環語句
#for循環
#for(變量;條件;表達式){語句}
[root@localhost ~]# awk 'BEGIN{total=0;for(i=0;i<=100;i++){total+=i;}print total;}'
5050
4.8、數組

數組是awk的靈魂,處理文本中最不能少的就是它的數組處理。因為數組索引(下標)可以是數字和字符串在awk中數組叫做關聯數組(associative arrays)。awk 中的數組不必提前聲明,也不必聲明大小。數組元素用0或空字符串來初始化,這根據上下文而定。

#得到數組長度
#length返回字符串以及數組長度,split進行分割字符串為數組,也會返回分割得到數組長度
[root@localhost ~]# awk 'BEGIN{info="it is a test";lens=split(info,tA," ");print length(tA),lens;}'
4 4#輸出數組內容
#無序輸出
[root@localhost ~]# awk 'BEGIN{info="it is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}'
4 test
1 it
2 is
3 a 
#有序輸出
[root@localhost ~]# awk 'BEGIN{info="it is a test";tlen=split(info,tA," ");for(k=1;k<=tlen;k++){print k,tA[k];}}'
1 it
2 is
3 a
4 test
4.9、腳本

-f scripfile?從腳本文件中讀取awk命令

[root@localhost opt]# vim asdf.txt
{if($3>=1000)print $1,$3}
[root@localhost opt]# awk -F: -f asdf.txt /etc/passwd
nfsnobody 65534
123123 1000

五、sed

stream editor的縮寫,其功能是利用語法/腳本對文本文件進行批量的編輯操作。

它是文本處理中非常重要的工具,能夠完美的配合正則表達式使用,功能不同凡響。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。

接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有 改變,除非你使用重定向存儲輸出。

Sed主要用來自動編輯一個或多個文件;簡化對文件的反復操作;編寫轉換程序等。

語法格式:sed [選項] '命令' 文件名

常用參數:

-n就顯示腳本處理后的結果
-e使用指定腳本處理輸入的文本文件
-f使用指定腳本文件處理輸入的文本文件
-r/-E支持擴展正則表達式
-i.bak直接修改文件內容而不輸出到終端,并備份文件
[root@localhost opt]# sed -n -e '/^r/p'  -e'/^b/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin[root@localhost opt]# sed -i.bak '1,4d' aaa  #刪除第1,第4行
[root@localhost opt]# cat aaa
eeeee
fffff
ggggg
hhhhh
[root@localhost opt]# cat aaa.bak 
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
ggggg
hhhhh
5.1、sed腳本格式
#范圍匹配
[root@localhost opt]# seq 5|sed -n 'p'        #不指定范圍則打印全文
1
2
3
4
5    
[root@localhost opt]# seq 5|sed -n '3p'       #打印第3行
3
[root@localhost opt]# seq 5|sed -n '1,3p'     #打印第1,第3行
1
2
3
[root@localhost opt]# seq 5|sed -n '1,+2p'    #打印第1行及后2行
1
2
3
[root@localhost opt]# seq 5|sed -n '1,2!p'    #取反
3
4
5
#步進
#打印第一行起,后每步進2打印一行,即奇數行
[root@localhost opt]# seq 10|sed -n '1~2p'
1
3
5
7
9
#打印第二行起,后每步進2打印一行,即偶數行
[root@localhost opt]# seq 10|sed -n '2~2p'
2
4
6
8
10
#第二行起,每三行步進打印
[root@localhost opt]# seq 10|sed -n '2~3p'
2
5
8
#第三行起,每三行步進打印
[root@localhost opt]# seq 10|sed -n '3~3p'
3
6
9
?5.2、sed命令
p打印模板塊的行
q退出Sed
s替換指定字符
d刪除,刪除選擇的行
a在當前行下面插入文本
i在指定行上面插入文本
c把選定的行改為新的文本
y把一個字符翻譯為另外的字符
=打印當前行號
r從file中讀行
w寫并追加模板塊到file末尾
!取反
#打印到第三行退出
[root@localhost ~]# cat /etc/passwd|sed '3q'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin#指定行后插入
[root@localhost ~]# seq 5|sed '2alook'
1
2
look
3
4
5
[root@localhost ~]# seq 5|sed '4alook\n eyes'
1
2
3
4
lookeyes
5
[root@localhost ~]# seq 5|sed '4alook\neyes'
1
2
3
4
look
eyes
5
[root@localhost ~]# seq 5|sed '3a   look'
1
2
3
look
4
5
[root@localhost ~]# seq 5|sed '3a\    look'
1
2
3look
4
5#指定行前插入
[root@localhost ~]# seq 5|sed '3i\    look'
1
2look
3
4
5
[root@localhost ~]# seq 5|sed '4ilook\neyes'
1
2
3
look
eyes
4
5#替換行
[root@localhost ~]# seq 5|sed '3c\    look'
1
2look
4
5
[root@localhost ~]# seq 5|sed '4clook\neyes'
1
2
3
look
eyes
5
5.3、搜索替換
替換標記定義
g行內全面替換
p打印行
w把行寫入一個文件
x互換模板塊中的文本和緩沖區中的文本
y把一個字符翻譯為另外的字符
\1子串匹配標記
&已匹配字符串標記
基本格式 s/pattern/string/修飾符
#替換第二個.為@
[root@localhost opt]# sed 's/\./@/2' /etc/hosts
127.0@0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6@localdomain6#匹配字符后添加
[root@localhost opt]# sed -n 's/r..t/&er/gp' /etc/passwd
rooter:x:0:0:rooter:/rooter:/bin/bash
operator:x:11:0:operator:/rooter:/sbin/nologin
ftp:x:14:50:FTP User:/var/fterp:/sbin/nologin
5.4、分組后向引用
#提取ip地址
[root@localhost opt]# ifconfig ens33|sed -rn '2s/.*inet ([0-9.]+) .*/\1/p'
192.168.153.23#提取文件權限
[root@localhost opt]# stat aaa文件:"aaa"大小:24        	塊:8          IO 塊:4096   普通文件
設備:fd00h/64768d	Inode:18799731    硬鏈接:1
權限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
環境:unconfined_u:object_r:usr_t:s0
最近訪問:2025-05-02 21:53:35.697373969 +0800
最近更改:2025-05-02 21:53:24.391268086 +0800
最近改動:2025-05-02 21:53:24.391268086 +0800
創建時間:-
[root@localhost opt]# stat aaa |sed -nr '4s/.*([0-9]{4}).*/\1/p'
0644
[root@localhost opt]# stat aaa|sed -n '4p'|egrep -o "[0-9]{4}"
0644
[root@localhost opt]# stat aaa|awk -F"[(/]" 'NR==4{print $2}'
0644

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

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

相關文章

Matlab/Simulink的一些功能用法筆記(4)

水一篇帖子 01--MATLAB工作區的保護眼睛顏色設置 默認的工作區顏色為白色 在網上可以搜索一些保護眼睛的RGB顏色參數設置 在MATLAB中按如下設置&#xff1a; ①點擊預設 ②點擊顏色&#xff0c;點擊背景色的三角標符號 ③點擊更多顏色&#xff0c;找到RGB選項 ④填寫顏色參數…

Qt國際化實戰--精通Qt Linguist工具鏈

概述 在全球化的今天,軟件產品需要支持多種語言和地區,以滿足來自世界各地用戶的需求。Qt框架提供了一套完整的工具集來幫助開發者實現應用程序的國際化(i18n)和本地化(l10n),其中最核心的就是Qt Linguist工具鏈 關于國際化與本地化 國際化(i18n): 指的是設計和開發…

0基礎 | STM32 | STM32F103C8T6開發板 | 項目開發

注&#xff1a;本專題系列基于該開發板進行&#xff0c;會分享源代碼 F103C8T6核心板鏈接&#xff1a; https://pan.baidu.com/s/1EJOlrTcProNQQhdTT_ayUQ 提取碼&#xff1a;8c1w 圖 STM32F103C8T6開發板 1、黑色制版工藝、漂亮、高品質 2、入門級配置STM32芯片(SEM32F103…

【SF順豐】順豐開放平臺API對接(注冊、API測試篇)

1.注冊開發者賬號 注冊地址&#xff1a;順豐企業賬戶中心 2.登錄開發平臺 登錄地址&#xff1a;順豐開放平臺 3.開發者對接 點擊開發者對接 4.創建開發對接應用 開發者應用中“新建應用”創建應用&#xff0c;最多創建應用限制數量5個 注意&#xff1a;需要先復制保存生產校驗…

AI Agent開發第48課-DIFY中利用AI動態判斷下一步流程-DIFY調用API、REDIS、LLM

開篇 之前我們在《AI Agent開發第47課-DIFY處理多步流程慢?你確認用對了?》中講述了DIFY的設計中在整合多步LLM時如避免過多調用LLM的良好設計,并給出了AI工作流的相應設計手法。今天我們要在上一篇的基礎上把“上門維修預約”這個流程進一步按照實際業務需求加入用戶在整個…

剝開 MP4 的 千層 “數字洋蔥”:從外到內拆解通用媒體容器的核心

在當今數字化時代&#xff0c;MP4 格式隨處可見&#xff0c;無論是在線視頻、手機拍攝的短片&#xff0c;還是從各種渠道獲取的音頻視頻文件&#xff0c;MP4 都占據著主流地位。它就像一個萬能的 “數字媒體集裝箱”&#xff0c;高效地整合和傳輸著各種視聽內容。接下來&#x…

JavaScript性能優化實戰:深入探討性能瓶頸與優化技巧

JavaScript性能優化實戰:深入探討性能瓶頸與優化技巧 引言 在當今快速發展的Web世界中,性能已經成為衡量應用質量的關鍵指標。隨著Web應用復雜度的不斷提升,JavaScript作為前端開發的核心語言,其性能優化變得尤為重要。本文旨在全面深入地探討JavaScript性能優化的各個方…

無憂AI綜合插件,可實現圖色識別、機器視覺、圖像編輯等多種功能

說明: 無憂AI綜合插件(vu.dll)是一款功能強大的AI腳本插件&#xff0c;主要用于按鍵精靈、易語言、Python、C/C等輔助制作工具&#xff0c;具有圖像識別、文本識別、鍵盤鼠標、內存操作、AI視覺等多種功能。 其官網地址 無憂 - AI圖色綜合插件 http:www.voouer.com/Plugin 功…

數據中臺產品功能介紹

在數字化轉型浪潮中&#xff0c;數據中臺作為企業數據管理與價值挖掘的核心樞紐&#xff0c;整合分散數據資源&#xff0c;構建統一的數據管理與服務體系。本數據中臺產品涵蓋數據可視化、數據建設、數據治理、數據采集開發和系統管理五大平臺&#xff0c;以豐富且強大的功能模…

opencv之圖像亮度變換和形態學變換(八)

opencv之圖像亮度變換和形態學變換&#xff08;八&#xff09; 文章目錄 opencv之圖像亮度變換和形態學變換&#xff08;八&#xff09;一、圖像亮度變換1.1 亮度變換1.2 線性變換1.3 直接像素值修改案例 二、形態學變換2.1 核**2.2 腐蝕&#xff08;Erosion&#xff09;****2.…

【初階數據結構】樹——二叉樹——堆(中)

文章目錄 前言 一、堆的概念與結構 二、堆的實現 堆的定義 1.初始化堆 2.堆的銷毀 3.堆的插入 3.1向上調整算法 4.堆的判空 5.求有效個數 6.刪除堆頂數據 6.1向下調整算法 7.獲取棧頂數據 三、完整源碼 總結 前言 上篇了解樹和二叉樹相關的概念&#xff0c;這篇學習一種特殊的…

AM剪輯軟件漢化版:簡單易用,開啟視頻創作之旅

在短視頻流量時代&#xff0c;視頻剪輯已經成為許多人表達自我和記錄生活的重要方式。無論是分享日常點滴、制作創意視頻還是進行專業內容創作&#xff0c;一款功能強大且操作簡便的視頻剪輯軟件是必不可少的。今天&#xff0c;我們要介紹的 AM剪輯軟件漢化版&#xff0c;就是這…

llfc項目分布式服務筆記

一、系統整體架構流程圖(簡明版) 復制代碼 +---------------+ +------------------+ +----------------+ | 客戶端 (Client) |--------->| GateServer |----------| StatusServer |<--+ +---------------+ +--------------…

C++如何設計和實現緩存(cache)來減少對后端存儲的訪問壓力

隨著數據量的激增和用戶對低延遲、高吞吐量需求的不斷提升,如何減少系統瓶頸、提升響應速度成為了開發者的核心挑戰之一。在這一背景下,緩存(cache)作為一種關鍵的技術手段,逐漸成為解決性能問題的核心策略。緩存的本質是通過存儲頻繁訪問的數據或計算結果,減少對后端存儲…

華為設備端口隔離

端口隔離的理論與配置指南 一、端口隔離的理論 基本概念 端口隔離&#xff08;Port Isolation&#xff09;是一種在交換機上實現的安全功能&#xff0c;用于限制同一VLAN內指定端口間的二層通信。被隔離的端口之間無法直接通信&#xff0c;但可通過上行端口訪問公共資源&#…

1688平臺商品詳情接口開發指南(含Python代碼示例)

接口概述 1688開放平臺提供的商品詳情接口&#xff08;item_get&#xff09;是獲取商品核心數據的重要API&#xff0c;開發者可通過該接口獲取商品標題、價格、規格參數、圖片等詳細信息。本文重點解析標題字段的獲取方式&#xff0c;并提供完整代碼示例。 接口請求參數 基礎…

Edge瀏覽器PDF字體顯示錯誤

Edge瀏覽器PDF字體顯示錯誤 軟件版本信息 Edge Version: 136.0.3240.50 Word Version: Microsoft Office 專業增強版2021問題描述 在Word中使用多級列表自動編號, 并使用Word軟件自帶的導出為PDF文件功能, 在Word中顯示正常的數字, 在Edge中查看PDF將會出現渲染錯誤的現象,…

Redis能保證數據不丟失嗎之AOF

我們都知道,Redis是一個基于內存的k-v數據庫,既然是基于內存的,那么Redis如何保證數據不丟失?以及真的能做到數據的百分百不丟失嗎? 為什么Redis數據需要持久化機制? Redis的一個常用場景是緩存,通常緩存丟失的話,我們也可以從數據庫中重新找回,那么為什么Redis還需…

Apache POI實現Excel的基本寫入、導出操作

目錄 一、Apache POI 簡介 二、入門案例(寫入導出) 三、實際開發過程中的導出操作——&#xff08;將文件下載至客戶端瀏覽器中&#xff09; 一、Apache POI 簡介 Apache POI&#xff08;Poor Obfuscation Implementation&#xff09;是 Apache 軟件基金會的開源項目&#…

HTTP請求與前端資源未優化的系統性風險與高性能優化方案

目錄 前言一、未合并靜態資源&#xff1a;HTTP請求的隱形殺手1.1 多文件拆分的代價1.2 合并策略與工具鏈實踐 二、未啟用GZIP壓縮&#xff1a;傳輸流量的浪費2.1 文本資源的壓縮潛力2.2 服務端配置與壓縮算法選擇 三、未配置瀏覽器緩存&#xff1a;重復請求的根源3.1 緩存失效的…