Linux系統中的管道命令、grep命令、sed命令和awk命令

来源:https://www.cnblogs.com/xyh9039/p/18337347
-Advertisement-
Play Games

本章將和大家分享Linux系統中的管道命令、grep命令、sed命令和awk命令。廢話不多說,下麵我們直接進入主題。 一、管道命令 Linux 中的管道命令(pipe)是一種非常強大的特性,它允許你將一個命令的輸出作為另一個命令的輸入。管道命令極大地增強了命令行的靈活性和功能,使得複雜的數據處理任務 ...


本章將和大家分享Linux系統中的管道命令、grep命令、sed命令和awk命令。廢話不多說,下麵我們直接進入主題。

一、管道命令

Linux 中的管道命令(pipe)是一種非常強大的特性,它允許你將一個命令的輸出作為另一個命令的輸入。管道命令極大地增強了命令行的靈活性和功能,使得複雜的數據處理任務變得簡單。

1、基本語法

command1 | command2

command1 的輸出會被傳遞給 command2 作為其輸入。

可以鏈式使用多個管道命令,例如 command1 | command2 | command3。

2、示例

1)查看系統進程並按記憶體使用量排序

ps aux --sort=-%mem | less

這裡,ps aux --sort=-%mem 命令列出所有進程並按記憶體使用率降序排序,然後通過管道傳遞給 less 命令,使得你可以逐頁查看輸出。

2)查找包含特定文本的文件,並計算行數

grep '特定文本' 文件名 | wc -l

這裡,grep '特定文本' 文件名 命令查找文件中包含“特定文本”的行,然後將這些行傳遞給 wc -l 命令來計算行數。

3)查看當前目錄的文件和目錄,然後僅顯示目錄

ls -l | grep '^d'

ls -l 命令以長格式列出當前目錄的內容,然後通過管道傳遞給 grep '^d' 命令,後者僅匹配以 d(表示目錄)開頭的行。

4)使用多個管道進行複雜的數據處理

假設你有一個日誌文件,你想要找出所有錯誤消息(假設以 "ERROR" 開頭),並計算這些消息的數量,同時忽略大小寫:

grep -i 'error' 日誌文件.log | wc -l

這裡,grep -i 'error' 日誌文件.log 命令使用 -i 選項忽略大小寫地查找包含 "error" 的行,然後通過管道傳遞給 wc -l 命令來計數。

3、註意事項

  • 管道命令中的每個命令都在其子 shell 中運行,因此它們之間的變數不是共用的。
  • 管道命令中每個命令的輸入和輸出都是通過標準輸入(stdin)和標準輸出(stdout)進行的,除非特別重定向了輸入或輸出。
  • 管道命令中的錯誤輸出(stderr)預設不會傳遞給下一個命令,除非使用重定向或特殊的命令(如 2>&1)來合併標準輸出和錯誤輸出。

二、grep命令

主要作用是文件過濾分割與合併,grep(global search regular expression(RE) and print out the line,全面搜索正則表達式並把行列印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行列印出來。

1、基本語法

grep [選項]... 模式 [文件]...
  • 選項:可以調整 grep 的行為,如忽略大小寫、顯示匹配行的行號等。
  • 模式:指定要搜索的文本模式,可以是簡單的字元串或複雜的正則表達式。
  • 文件:指定要搜索的文件名。如果沒有指定文件名,grep 將從標準輸入讀取數據。

2、常用選項

  • -i:忽略大小寫。
  • -v:反向選擇,只顯示不匹配的行。
  • -c:計算匹配的行數,而不是顯示行內容。
  • -l:只列出包含匹配文本的文件名,而不顯示匹配的行。
  • -n:顯示匹配的行號。
  • -r 或 -R:遞歸搜索子目錄中的文件。
  • -E:使用擴展的正則表達式。
  • -F:將模式作為固定字元串處理,而不是正則表達式。
  • -o:只輸出匹配的部分,而不是整行。
  • -A 數字:顯示匹配行以及之後的幾行。
  • -B 數字:顯示匹配行以及之前的幾行。
  • -C 數字:顯示匹配行以及上下文的幾行。

3、示例

1)基本語法

grep pattern file.txt

2)忽略大小寫

grep -i pattern file.txt

3)顯示行號

grep -n pattern file.txt

4)遞歸搜索所有子目錄

grep -rnw '/path/to/directory' -e 'pattern'

5)只顯示文件名

grep -l pattern *.txt

6)只顯示匹配的行數

grep -c pattern file.txt

7)匹配整個單詞

grep -w pattern file.txt

8)使用正則表達式

grep -E '\bword\b' file.txt

9)顯示上下文的幾行

grep -C 2 pattern file.txt

10)搜索文件中的所有“error”字元串

grep "error" /var/log/syslog

11)搜索當前目錄及子目錄下所有文件中包含“function”的行,並顯示行號

grep -rn "function" .

12)計算文件中包含“warning”的行數

grep -c "warning" file.txt

13)反向選擇,顯示不包含“debug”的所有行

grep -v "debug" file.txt

14)在多個文件中查找

grep "match_pattern" file_1 file_2 file_3 ...

15)標記匹配顏色 --color=auto 選項

grep "match_pattern" file_name --color=auto

16)使用正則表達式 -E 選項

grep -E "[1-9]+"
或
egrep "[1-9]+"

17)只輸出文件中匹配到的部分 -o 選項

[root@localhost ~]# echo this is a test line. | grep -o -E "[a-z]+\."
line.
[root@localhost ~]# echo this is a test line. | egrep -o "[a-z]+\."
line.

18)統計文件或者文本中包含匹配字元串的行數 -c 選項

grep -c "text" file_name

19)輸出包含匹配字元串的行數 -n 選項

grep "text" -n file_name
或
cat file_name | grep "text" -n

#多個文件
grep "text" -n file_1 file_2

20)搜索多個文件並查找匹配文本在哪些文件中

grep -l "text" file1 file2 file3...

4、grep遞歸搜索文件

1)在多級目錄中對文本進行遞歸搜索

grep "text" . -r -n
# .表示當前目錄

2)忽略匹配樣式中的字元大小寫

[root@localhost ~]# echo "hello world" | grep -i "HELLO"
hello world

3)選項 -e 制動多個匹配樣式

[root@localhost ~]# echo this is a text line | grep -e "is" -e "line" -o
is
is
line
#也可以使用-f選項來匹配多個樣式,在樣式文件中逐行寫出需要匹配的字元。
[root@localhost myfolder]# cat patfile
aaa
bbb
[root@localhost myfolder]# echo aaa bbb ccc ddd eee | grep -f patfile -o
aaa
bbb

4)在grep搜索結果中包括或者排除指定文件

#只在目錄中所有的.php和.html文件中遞歸搜索字元"main()"
grep "main()" . -r --include *.{php,html}

#在搜索結果中排除所有README文件
grep "main()" . -r --exclude "README"

#在搜索結果中排除filelist文件列表裡的文件
grep "main()" . -r --exclude-from filelist

5)grep靜默輸出

grep -q "test" filename
#不會輸出任何信息,如果命令運行成功返回0,失敗則返回非0值。一般用於條件測試。

6)列印出匹配文本之前或者之後的行

#顯示匹配某個結果之後的3行,使用 -A 選項:
[root@localhost myfolder]# seq 10 | grep "5" -A 3
5
6
7
8

#顯示匹配某個結果之前的3行,使用 -B 選項:
[root@localhost myfolder]# seq 10 | grep "5" -B 3
2
3
4
5

#顯示匹配某個結果的前三行和後三行,使用 -C 選項:
[root@localhost myfolder]# seq 10 | grep "5" -C 3
2
3
4
5
6
7
8

#如果匹配結果有多個,會用“--”作為各匹配結果之間的分隔符:
[root@localhost myfolder]# echo -e "a\nb\nc\na\nb\nc" | grep a -A 1
a
b
--
a
b

三、sed命令

sed 是一種線上編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩衝區中,稱為“模式空間”(pattern space),接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接著處理下一行,這樣不斷重覆,直到文件末尾。文件內容並沒有改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反覆操作;編寫轉換程式等。

1、基本語法

sed [選項]... '{命令}' [輸入文件]...
  • 選項:控制sed的行為,如-i直接修改文件內容,-e允許多個編輯命令等。
  • 命令:用單引號括起來,指定要對文本執行的操作。
  • 輸入文件:指定sed要處理的文件。如果未指定文件,sed將從標準輸入讀取數據。

2、常用選項

  • -e:添加一個編輯命令。
  • -f:從文件中讀取編輯命令。
  • -i:直接修改文件內容。
  • -n:抑制預設輸出,只輸出被明確指定的行。
  • -r:啟用擴展正則表達式支持。
  • -u:以原子方式更新文件(與 -i 一起使用)。

3、命令格式

sed 命令的基本格式是:

[address][,address] command
  • address:可以是行號或正則表達式,用於指定命令作用的範圍。
  • command:要執行的操作。

4、常用命令

  • p:列印匹配的行。
  • d:刪除匹配的行。
  • s:替換文本。
  • i:在指定行之前插入文本。
  • a:在指定行之後追加文本。
  • c:替換匹配的行。

5、示例

1)列印文件的前幾行

sed -n '1,5p' filename

-n選項和p命令一起使用,僅列印被p命令指定的行(這裡是前1~5行)。

2)刪除文件中的空行

sed '/^$/d' filename

使用正則表達式/^$/匹配空行,d命令刪除這些行。

3)替換文本

sed 's/old/new/g' filename

將文件中的"old"替換為"new"。g標誌表示全局替換(即每行中的所有匹配項)。

4)直接修改文件(危險動作,註意確認)

sed -i 's/old/new/g' filename

-i選項允許sed直接修改文件內容,而不是輸出到標準輸出。

5)在特定行之前或之後插入文本

sed '3i\New line' filename  # 在第3行之前插入"New line"  
sed '3a\New line' filename  # 在第3行之後追加"New line"

6)替換整行

sed '3c\This is a new line' filename

將第3行替換為"This is a new line"。

7)替換字元串並保存結果

sed -i 's/pattern/replacement/g' file.txt

這將直接修改 file.txt 文件中的內容。

8)讀取多個文件並應用相同的編輯

sed 's/pattern/replacement/g' file1.txt file2.txt

9)使用多個編輯命令

sed -e 's/pattern1/replacement1/g' -e 's/pattern2/replacement2/g' file.txt

10)使用行號指定編輯範圍

sed '1,10 s/pattern/replacement/g' file.txt

11)以行為單位的新增/刪除

將 ./file 的內容列出並且列印行號,同時刪除2~5行內容:

[root@localhost myfolder]# nl ./file | sed '2,5d'
     1  11
     6  66
     7  77
     8  88
     9  99
......

因為2~5行內容被刪除了,所以就不顯示2~5行的內容了。

只要刪除第 2 行:

[root@localhost myfolder]# nl ./file | sed '2d'
     1  11
     3  33
     4  44
     5  55
     6  66
......

要刪除第 10 到最後一行:

[root@localhost myfolder]# nl ./file | sed '10,$d'
     1  11
     2  22
     3  33
     4  44
     5  55
     6  66
     7  77
     8  88
     9  99

在第2行後面加上[drink tea]字樣:

[root@localhost myfolder]# nl ./file | sed '2a drink tea'
     1  11
     2  22
drink tea
     3  33
     4  44
     5  55
     6  66
     7  77
     8  88
     9  99
......

在第2行前面加上[drink tea]字樣:

[root@localhost myfolder]# nl ./file | sed '2i drink tea'
     1  11
drink tea
     2  22
     3  33
     4  44
     5  55
     6  66
     7  77
......

如果要增加兩行以上,例如:[Drink tea or …..]與[drink beer?]:

[root@localhost myfolder]# nl ./file | sed '2a Drink tea or ......\
> drink beer?'
     1  11
     2  22
Drink tea or ......
drink beer?
     3  33
     4  44
     5  55
...省略...

每一行之間都必須要以反斜杠“\”來進行新行的添加。

12)以行為單位的替換與顯示

將第2~5行的內容替換為[No 2~5]:

[root@localhost myfolder]# nl ./file | sed '2,5c No 2~5'
     1  11
No 2~5
     6  66
     7  77
     8  88
......

通過這個方法我們就能夠將數據整行取代了!

僅列出 ./file 文件內的第 5~7 行內容:

[root@localhost myfolder]# nl ./file | sed -n '5,7p'
     5  55
     6  66
     7  77

13)數據的搜尋並顯示

搜索 ./file 有aa關鍵字的行,並且只輸出匹配的行:

[root@localhost myfolder]# nl ./file | sed -n '/aa/p'
    17  aa
    32  dsaaaaaaaaaassdasdassdadadssdasdasd3213213213
    37  Gaaa
    59  aaaaa

其中使用-n表示只列印匹配的行。

14)數據的搜尋並刪除

刪除 ./file 所有包含“22”的行,其他行輸出:

[root@localhost myfolder]# nl ./file | sed '/22/d'
     1  11
     3  33
     4  44
     5  55
     6  66
......

15)數據的搜尋並執行命令

搜索 ./file 文件找到root對應的行,執行後面花括弧中的一組命令,每個命令之間用分號分隔,這裡把 test 替換為 testNew,再輸出這行:

[root@localhost myfolder]# nl ./file | sed -n '/root/{s/test/testNew/;p}'
    32  testNew admin root

如果只替換 ./file 的第一個 test 關鍵字為 testNew ,就退出:

[root@localhost myfolder]# nl ./file | sed -n '/test/{s/test/testNew/;p;q}'
    32  testNew admin root

最後的q表示退出。

16)數據的搜尋並替換

除了整行的處理模式之外,sed 還可以用行為單位進行部分數據的搜尋並取代。基本上 sed 的搜尋、替代與 vi 類似:

sed 's/要被取代的字串/新的字串/g'

四、awk命令

awk是行處理器:相比較屏幕處理的優點,在處理大文件時不會出現記憶體溢出或是處理緩慢的問題,通常用來格式化文本信息。

awk處理過程:依次對每一行進行處理,然後輸出。

1、基本語法

awk [options] 'pattern {action}' [filename]
  • options:命令行選項,用於控制awk的工作方式。這些選項包括設置欄位分隔符、定義變數等。
  • pattern:模式匹配,用於指定哪些行或記錄需要被處理。模式可以是正則表達式、條件表達式或布爾表達式。如果省略pattern,則對所有行執行action。
  • action:當模式匹配成功時,需要執行的命令或語句。這些命令或語句可以是內置的awk命令,也可以是自定義的代碼塊。
  • filename:指定要處理的文件名。如果省略,則預設從標準輸入讀取。

2、常用選項

  • -F fs 或 --field-separator=fs:設置欄位分隔符,預設為空格。
  • -v var=val 或 --assign=var=val:定義變數及其初始值。
  • -f script-file 或 --file=script-file:從文件中讀取awk腳本。
  • -i inplace 或 --inplace:直接在原文件上修改(註意:這個選項在GNU awk中可能不被支持,需要使用其他工具如sed實現)。
  • -n 或 --non-decimal-data:允許非十進位數被識別。
  • -W interactive 或 --interactive:以交互模式運行。

3、腳本語法

awk 腳本通常由模式(pattern)和動作(action)組成。基本形式為:

pattern { action }
  • pattern:一個表達式,如果為真,則執行 action。
  • action:一組要執行的命令。

如果省略 pattern,則預設為 true,意味著 action 將應用於每一行。

4、內置變數

awk 提供了一些內置變數來簡化腳本編寫:

  • ARGC:命令行參數的數量。
  • ARGV:命令行參數的數組。
  • ENVIRON:環境變數的數組。
  • FILENAME:當前文件名。
  • FNR:當前文件中的記錄編號。
  • FS:欄位分隔符。
  • NF:當前記錄中的欄位數量。
  • NR:所有處理過的記錄總數。
  • OFS:輸出欄位分隔符。
  • ORS:輸出記錄分隔符。
  • RS:輸入記錄分隔符。

5、函數

awk 提供了多種內置函數來處理文本和數值數據:

  • print:輸出數據。
  • printf:格式化輸出數據。
  • getline:從文件中讀取一行。
  • split:分割字元串到數組。
  • gsub:全局替換。
  • match:正則表達式匹配。
  • rand 和 srand:生成隨機數。
  • sqrt, exp, log, sin, cos, atan2:數學函數。
  • tolower 和 toupper:轉換字元串為小寫或大寫。
  • length:返回字元串長度。
  • index:返回子字元串的位置。
  • substr:獲取子字元串。
  • mktime:轉換日期字元串為時間戳。

6、awk命令形式

awk [-F|-f|-v] 'BEGIN{} /pattern/ {command1;command2} END{}' [filename]
  • [-F|-f|-v]  大參數,-F指定分隔符,-f調用腳本,-v定義變數 var=value
  • ' '  引用代碼塊
  • BEGIN  初始化代碼塊,在對每一行進行處理之前,初始化代碼,主要是引用全局變數,設置FS分隔符
  • /pattern/  匹配代碼塊,可以是字元串或正則表達式
  • {}  命令代碼塊,包含一條或多條命令
  • ;  多條命令使用分號分隔
  • END  結尾代碼塊,在對每一行進行處理之後再執行的代碼塊,主要是進行最終計算或輸出結尾摘要信息
  • [filename]  需要處理的文件

7、特殊要點

$0 表示整個當前行
$1 每行第一個欄位
$n 當前記錄的第n個欄位,欄位間由FS分隔
NF 欄位數量變數
NR 每行的記錄號,多文件記錄遞增
FNR 與NR類似,不過多文件記錄不遞增,每個文件都從1開始
\t 製表符
\n 換行符
FS BEGIN時定義分隔符(預設是任何空格)
RS 輸入的記錄分隔符, 預設為換行符(即文本是按一行一行輸入)
~ 匹配,與==相比不是精確比較
!~ 不匹配,不精確比較
== 等於,必須全部相等,精確比較
!= 不等於,精確比較
&& 邏輯與
||  邏輯或
OFS 輸出欄位分隔符, 預設也是空格,可以改為製表符等
ORS 輸出的記錄分隔符,預設為換行符,即處理結果也是一行一行輸出到屏幕
-F'[:#/]' 定義三個分隔符

8、示例

1) 列印所有行

awk '{print}' file.txt

2)列印特定列

awk '{print $1}' file.txt  # 列印第一列

3)計算總和

awk '{sum += $1} END {print sum}' numbers.txt

4)過濾特定模式

awk '/pattern/ {print}' file.txt

5)使用多個模式

awk '/pattern1/ || /pattern2/ {print}' file.txt

6)自定義分隔符

awk -F: '{print $1}' /etc/passwd  # 使用冒號作為分隔符,列印/etc/passwd文件的第一列(用戶名)

9、註意事項

  • awk預設按行處理文本,並使用空格作為欄位分隔符。
  • awk支持變數定義、流程式控制制(如if、else、for、while)、數學函數和字元串函數等高級功能。
  • awk還提供了BEGIN和END兩個特殊的模式塊,BEGIN塊在讀取任何輸入行之前執行,END塊在讀取完所有輸入行之後執行。
  • awk中的$0代表整行文本,$1、$2、$3...代表第一個、第二個、第三個欄位等。
  • awk還包含一些內置變數,如NR(當前記錄號,即行號)、NF(當前記錄的欄位數,即每行的列數)等。

這些只是 awk 基礎使用的冰山一角。awk 的功能非常強大,可以編寫複雜的腳本來處理各種各樣的任務。

 

此文由博主精心撰寫轉載請保留此原文鏈接:https://www.cnblogs.com/xyh9039/p/18337347

版權聲明:如有雷同純屬巧合,如有侵權請及時聯繫本人修改,謝謝!!! 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言​ 推薦一個基於.NET 8 實現的通用許可權開發框架Admin.NET,前端使用Vue3/Element-plus開發。 基於.NET 8(Furion)/SqlSugar實現的通用管理平臺。整合最新技術,模塊插件式開發,前後端分離,開箱即用。 集成多租戶、緩存、數據校驗、鑒權、事件匯流排、動態A ...
  • 最近遇到一個項目,由於客戶指定了印表機型號:HP LaserJet Pro M501n ,本來想著參考網上的代碼,使用System.Management來實現對印表機狀態的查詢,測試過程中發現無論是缺紙、空閑,獲取到的統統都是空閑狀態,咨詢售後也是說無法獲取狀態,也不提供SDK;後面在社區看見可以通 ...
  • 經過2個月的詳細調研,**稀土目前缺少生產車間之間數據協同交互、缺少完整的生產工序數據協同監測和分析,無法及時瞭解生產過程和經營情況,更無法進行有效的生產過程優化。本項目推動**稀土生產環節的數字化、信息化和智能化改造,從行業、戰略、技術和市場等方案全面提升**稀土的競爭力,打造**稀土焙燒、水浸、... ...
  • 前言 在項目開發中,方法返回的結果(成功或失敗)對我們開發來說很重要。傳統方法,如通過異常來指示錯誤或使用特定的返回類型(如布爾值加輸出參數),雖然有效,但可能缺乏直觀性和靈活性。 FluentResults庫應運而生,它以一種既流暢又富有表達力的方式,極大地優化了這一過程。通過使用FluentRe ...
  • 在C#中,集合是用於存儲和操作一組數據項的數據結構。這些集合通常位於 System.Collections 和 System.Collections.Generic 命名空間中。下麵我將概述C#中幾種常用的集合類型及其特點: 1. System.Collections 命名空間中的集合 這個命名空間 ...
  • ...
  • 前言 在實際項目開發中,需求變更和項目迭代是常態。要求我們能夠迅速響應,對資料庫結構進行相應的調整,如添加新表、更新現有表結構或增加欄位等。 為了確保團隊成員之間的信息同步,實時更新和維護資料庫文檔變得至關重要。這不僅提升了資料庫的可讀性,也極大提高了開發效率和團隊協作的流暢性。 SmartSQL, ...
  • 前言 .NET許可權管理及快速開發框架、最好用的許可權工作流系統。 基於經典領域驅動設計的許可權管理及快速開發框架,源於Martin Fowler企業級應用開發思想及最新技術組合(SqlSugar、EF、Quartz、AutoFac、WebAPI、Swagger、Mock、NUnit、Vue2/3、Ele ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...