Perl One-liner 數據處理——基礎語法篇【匠心】

Perl(Practical Extraction and Report Language)是一種功能強大且靈活的腳本語言,因其強大的文本處理能力和簡潔的語法而廣受開發者和系統管理員的喜愛。特別是在命令行環境下,Perl 的 one-liner(單行腳本)以其高效、簡潔的特點,成為數據處理、文本轉換和快速原型設計的利器。本文將詳細介紹 Perl one-liner 在數據處理中的基礎語法知識,涵蓋常用選項、變量、數組、字符串操作、內置函數、條件語句、循環等內容,為后續深入應用打下堅實基礎。

一、Perl One-liner 的基本概念

Perl one-liner 是指在命令行中通過單行代碼執行的 Perl 腳本,通常結合管道(|)或文件輸入輸出,用于快速處理文本數據。它的核心優勢在于無需編寫完整的腳本文件,通過命令行參數和簡潔的語法即可實現復雜的數據處理任務。Perl one-liner 的典型格式如下:

perl [選項] '腳本內容' [輸入文件]

其中:

  • [選項]:如 -e-p-n-a 等,用于控制 Perl 的執行行為。
  • '腳本內容':單行 Perl 代碼,定義具體的處理邏輯。
  • [輸入文件]:可選,指定輸入文件;若省略,Perl 從標準輸入(STDIN)讀取數據。

以下是一個簡單的例子,用于在每行前添加行號:

echo -e "apple\nbanana\ncherry" | perl -pe '$_="$. $_"'

輸出:

1 apple
2 banana
3 cherry

在這個例子中,-p 選項讓 Perl 逐行處理輸入,$. 表示行號,$_ 表示當前行內容,$_="$. $_" 將行號和行內容拼接后賦值給 $_,最終打印。

二、核心選項與工作機制

Perl one-liner 的強大離不開其豐富的命令行選項。以下是數據處理中最常用的選項及其工作機制。

1. -e:執行單行代碼

-e 表示后面跟隨的是 Perl 代碼,而不是腳本文件。例如:

perl -e 'print "Hello, World!\n"'

輸出:

Hello, World!

-e 是 Perl one-liner 的基礎,允許直接在命令行中指定代碼。

2. -p-n:逐行處理輸入

-p-n 是 Perl one-liner 的核心選項,用于處理輸入流(如標準輸入或文件)。它們的工作機制是將用戶代碼包裝在一個隱式的循環中:

while (<>) {# 用戶代碼
}
  • -n:逐行讀取輸入,執行用戶代碼,但不自動打印結果。例如:
echo -e "apple\nbanana" | perl -ne 'print if /a/'

輸出:

apple
banana

這里,-n 讓 Perl 逐行讀取輸入,print if /a/ 僅打印包含字母 a 的行。

  • -p:與 -n 類似,但會在每次循環結束時自動打印 $_(當前行內容)。例如:
echo -e "apple\nbanana" | perl -pe 's/a/A/'

輸出:

Apple
bAnAnA

這里,-p 讓 Perl 逐行讀取并替換 aA,然后自動打印每一行。

區別-p 適合需要修改并輸出每一行的場景,而 -n 適合需要篩選或手動控制輸出的場景。

3. -a:自動分割

-a 選項與 -n-p 結合使用,自動將每行按空白字符(空格、Tab)分割為數組 @F。例如:

echo "a b c" | perl -ane 'print "$F[0]\n"'

輸出:

a

這里,-a 將輸入行 a b c 分割為數組 @F["a", "b", "c"]),print "$F[0]\n" 打印第一個元素 a

可以通過 -F 指定分隔符。例如,使用 : 作為分隔符:

echo "a:b:c" | perl -F: -ane 'print "$F[0]\n"'

輸出:

a

4. -l:自動換行

-l 選項確保 print 語句自動添加換行符(\n),并在讀取時自動去除每行的換行符(類似 chomp)。例如:

echo "apple" | perl -le 'print "fruit: $_"'

輸出:

fruit: apple

若無 -l,需要手動添加 \n

echo "apple" | perl -e 'print "fruit: $_\n"'

5. 選項組合

選項可以組合使用,例如 -lane 表示同時啟用 -l(自動換行)、-a(自動分割)、-n(逐行處理)、-e(執行代碼)。以下是一個綜合示例,打印每行第一個字段和字段數量:

echo "a b c" | perl -lane 'print "$F[0], fields: ", scalar @F'

輸出:

a, fields: 3

三、變量與數據結構

Perl one-liner 中,變量和數據結構是數據處理的核心。以下是常用變量和數組的相關知識。

1. 變量命名規則

  • 標量變量:以 $ 開頭,例如 $a$name。標量存儲單一值(如數字、字符串)。訪問數組元素時也使用 $,如 $a[0] 表示數組 @a 的第一個元素。
  • 數組:以 @ 開頭,例如 @a@fields。數組存儲有序的標量列表。
  • 哈希:以 % 開頭,例如 %hash,用于存儲鍵值對(本文暫不深入)。

注意:與 AWK 不同,Perl 不強制要求變量聲明,變量在使用時自動創建。例如:

perl -e '$x = 42; print $x'

輸出:

42

2. 內置變量

Perl 提供豐富的內置變量,簡化數據處理。以下是常用的內置變量:

  • $_:默認變量,存儲當前行內容(-p-n 模式下)。許多函數(如 prints///)默認操作 $_
  • $.:當前行號,從 1 開始計數。
  • @F:當使用 -a 選項時,存儲當前行按分隔符分割后的字段數組。
  • @ARGV:存儲命令行傳入的文件參數。
  • $1, $2, …:正則表達式捕獲組,用于提取匹配內容。

示例:打印行號和行內容:

echo -e "apple\nbanana" | perl -pe '$_="$.: $_"'

輸出:

1: apple
2: banana

3. 數組操作

數組是 Perl one-liner 中處理多字段數據的關鍵。以下是常見操作:

  • 創建數組:通過 split-a 選項生成。例如:
echo "a b c" | perl -ne 'chomp; @a = split; print "$a[0]\n"'

輸出:

a
  • 訪問元素:使用 $a[索引],如 $a[0] 表示第一個元素,$a[-1] 表示最后一個元素。
  • 數組長度:使用 scalar @a 或在標量上下文中的 @a 獲取數組元素個數。例如:
echo "a b c" | perl -ane 'print scalar @F, "\n"'

輸出:

3

四、字符串操作

字符串處理是 Perl one-liner 的核心功能,涵蓋字符串拼接、替換、分割等操作。

1. 單引號與雙引號

  • 單引號 ' ':字符串按字面值處理,不解析變量或轉義符(除 \'\\ 外)。例如:
perl -e 'print "Line: $.\n"'

輸出:

Line: $.\n
  • 雙引號 " ":支持變量插值和轉義符(如 \n\t)。例如:
perl -e '$x = "World"; print "Hello, $x!\n"'

輸出:

Hello, World!

2. 字符串拼接

Perl 使用點號(.)拼接字符串。例如:

perl -e '$a = "Hello"; $b = "World"; print $a . ", " . $b . "!\n"'

輸出:

Hello, World!

3. 正則表達式與替換

Perl 的正則表達式(regex)功能是其核心優勢之一。相比其他命令行工具如 grep(用于提取)、sed(用于替換)或 awk(用于字段處理),Perl 的正則表達式提供了更豐富的功能、更靈活的語法和更強大的捕獲機制。

搜索:匹配模式

使用 =~ /pattern/ 操作符判斷字符串是否匹配正則表達式,常與 -n-p 結合篩選行。例如:

echo -e "apple\nbanana" | perl -ne 'print if /pp/'

輸出

apple

這里,/pp/ 匹配包含連續兩個 p 的行,print 輸出符合條件的行。運用修飾符(如 /i 忽略大小寫)可增強靈活性。

提取:錨定位置

正則表達式的捕獲組(用 () 定義)是提取數據的強大工具,捕獲內容存儲在 $1$2 等變量中。例如,提取夾在字母之間的數字:

echo "hello1996world" | perl -ne 'if (/[a-z]([0-9]+)[a-z]/) { print "$1\n" }'

輸出

1996

命名捕獲:Perl 支持命名捕獲組 (?<name>pattern),通過 ${+{name}}$+{name} 訪問,增強可讀性。例如:

echo "hello1996world" | perl -ne '/(?<=[a-z])([0-9]+)(?=[a-z])/;print $1'

輸出

1996

這里,(?<=[a-z])(正向后視)確保數字前是字母,([0-9]+) 捕獲數字,(?=[a-z])(正向前視)確保數字后是字母,print $1 輸出捕獲的數字。

而用 grep 實現是這樣的:

echo "hello1996world" | grep -P '(?<=[a-z])([0-9]+)(?=[a-z])' -o

grep 的對比

  • grep 也用于行匹配,其最大的優勢是完成復雜的數據提取任務。
  • Perl 優勢:支持更復雜的正則表達式(如命名捕獲、零寬斷言),并允許在匹配后直接處理(如提取子字符串)。
  • grep 局限:正則功能較簡單(如不支持命名捕獲),且難以直接修改內容,需要與 sed 結合使用。
替換:修改文本

使用 s/pattern/replacement/ 進行字符串替換,常與 -p 結合自動打印結果。例如:

echo "apple" | perl -pe 's/pp/PP/'

輸出

aPPle

替換支持修飾符,如 /g(全局替換):

echo "apple app" | perl -pe 's/p/P/g'

輸出

aPPle aPP

靈活分隔符s/// 的分隔符不限于斜杠,可以使用 #|、甚至 {} 等,避免轉義問題。例如:

echo "/usr/bin" | perl -pe 's#/usr#/opt#'

輸出

/opt/bin

條件替換:結合 ifunless 實現選擇性替換。例如:

echo -e "apple\nbanana" | perl -pe 's/a/A/ if /pp/'

輸出

Apple
banana

這里,僅當行包含 pp 時,將 a 替換為 A

sed 的對比

  • sed 也支持替換,例如 sed 's/pp/PP/' file 與 Perl 的 s/pp/PP/ 類似。
  • Perl 優勢:支持復雜正則(如零寬斷言、條件邏輯),允許動態替換(如通過 $1 引用捕獲組),且語法更現代。
  • sed 局限:正則功能較弱(如不支持非貪婪匹配),替換邏輯較為簡單,難以處理復雜條件。
復雜行列處理

一個經典的例子是提取重復行。

使用 AWK 實現:

echo 123445 | fold -w1 | awk '{count[$0]++} END {for (line in count) if (count[line] > 1) print line}'
echo 123445 | fold -w1 | awk 'a[$0]++'

注意后者的行為是:

  • 每一行 $0 存入數組 a
  • 如果某行是第一次出現,則 a[$0]++0,AWK 認為是 false,不打印
  • 從第二次開始 a[$0]++ 為 1、2…,被視為 true,就會輸出這一行

使用 Perl 實現:

echo 123445 | fold -w1 | perl -ne '$count{$_}++ }{ print for grep { $count{$_} > 1 } keys %count'
echo 123445 | fold -w1 | perl -ne 'print if $a{$_}++'

awk 的對比

  • awk 擅長字段處理,例如 awk '{print $2}' 提取第二列,而 Perl 更適合復雜正則提取。
  • Perl 優勢:正則表達式支持零寬斷言、命名捕獲等高級功能,提取邏輯更靈活;可直接處理非結構化文本。
  • awk 局限:正則功能較弱,主要依賴字段分割,難以處理復雜模式(如跨字段匹配)。
進階正則特性
  • 非貪婪匹配:使用 .*? 替代 .* 進行非貪婪匹配。例如,提取第一個 <tag>
echo "<a>text<b>" | perl -ne 'if (/<(.*?)>/) { print "$1\n" }'

輸出

a
  • 多行模式:修飾符 /m 使 ^$ 匹配每行開頭和結尾,/s 使 . 匹配換行符。例如:
echo -e "line1\nline2" | perl -ne 'print if /^line1/m'

輸出

line1
  • 正則調試:使用 use re "debug"(需在腳本中)或分解模式,驗證復雜正則的正確性。
Perl 的獨特優勢

相比 grepsedawk,Perl one-liner 在正則處理上有以下優勢:

  • 功能豐富:支持零寬斷言、命名捕獲、非貪婪匹配等高級特性,遠超 grepsed
  • 編程靈活性:Perl 允許在正則后結合條件邏輯(如 if /pattern/)、循環和變量操作,而 awk 更適合結構化數據。
  • 一致性:Perl 的正則語法現代且統一,相比 sed 的傳統正則(如需轉義 {})更易用。
  • 跨場景適用:Perl 既能像 grep 篩選行,像 sed 替換文本,也能像 awk 處理字段,且支持復雜邏輯。

局限性

  • Perl one-liner 的學習曲線稍陡,語法靈活性可能導致新手出錯。
  • 對于簡單任務,grep(匹配)、sed(替換)或 awk(字段提取)可能更直觀。
綜合示例

提取日志中夾在 [ERROR]: 之間的時間戳,僅當行包含 fail

echo "[ERROR] 2025-05-13 23:45:01: fail detected" | perl -ne 'if (/fail/ && /\[ERROR\] (.*?):/) { print "$1\n" }'

輸出

2025-05-13 23:45:01

對比其他工具

  • grepgrep 'fail' | grep -oP '\[ERROR\] \K.*?(?=:)'(需 Perl 正則擴展)。
  • sedsed -n '/fail/s/.*\[ERROR\] \(.*\):.*/\1/p'(復雜且不易讀)。
  • awk:需先分割字段,難以處理非結構化模式。
  • Perl:邏輯清晰,結合 /fail/ 和捕獲組,代碼簡潔且可擴展。

4. qqq 操作符

Perl 的字符串操作符 q()qq() 比單雙引號更靈活,允許自定義分隔符(如 (){}||# 等),在處理包含引號的字符串時尤為有用。新手可能只熟悉單引號('')和雙引號(""),但以下用法更具優勢:

  • q():等價于單引號,不解析變量或轉義符(除 \'\\)。例如:

    perl -e 'print q#Hello, "World"!#'  # 輸出:Hello, "World"!
    
  • qq():等價于雙引號,支持變量插值。例如:

    perl -e '$x = "Perl"; print qq|Welcome to $x!|'  # 輸出:Welcome to Perl!
    

自定義分隔符避免轉義問題,例如:

echo "data" | perl -pe '$_ = q{prefix:$_}'

輸出:

prefix:data

新手需注意,qq() 支持變量插值,而 q() 不支持。選擇分隔符時,優先使用與內容無沖突的字符(如 #|)。

五、函數與內置工具

Perl 提供豐富的內置函數,簡化數據處理。以下是常用的函數及其用法。

1. chomp

chomp 去除字符串末尾的換行符(\n),常用于清理輸入數據。例如:

echo "apple" | perl -ne 'chomp; print "fruit: $_"'

輸出:

fruit: apple

若無 chomp,輸出可能包含換行符,導致格式混亂。

2. split

split 將字符串按指定分隔符分割為數組。默認分隔符為空白字符。例如:

echo "a:b:c" | perl -ne 'chomp; @a = split /:/; print "$a[0]\n"'

輸出:

a

3. length

length 返回字符串的長度。例如:

echo "apple" | perl -ne 'print length($_), "\n"'

輸出:

6

注意:length(@F) 用于數組時,返回數組的第一個元素的長度,而不是數組長度。正確獲取數組長度需使用 scalar @F

4. scalar

scalar 強制將表達式置于標量上下文,常用于獲取數組長度。例如:

echo "a b c" | perl -ane 'print scalar @F, "\n"'

輸出:

3

5. localtime

localtime 返回當前時間或指定時間戳的格式化字符串,常用于日志處理。例如:

perl -e 'print scalar localtime, "\n"'

輸出:

Tue May 13 23:20:00 2025

六、控制結構

Perl one-liner 支持條件語句和循環,增強腳本的靈活性。

1. 條件語句

  • if:條件為真時執行。例如:
echo "apple" | perl -ne 'print if /a/'

輸出:

apple
  • unless:條件為假時執行。例如:
echo "apple" | perl -ne 'print unless /b/'

輸出:

apple

2. 循環

Perl one-liner 中,循環常用于處理范圍或數組。

  • 范圍操作符 ..:生成數字或字母序列。例如:
perl -e 'print join(",", 0..3), "\n"'

輸出:

0,1,2,3

字母范圍:

perl -e 'print join(",", "a".."c"), "\n"'

輸出:

a,b,c
  • foreach 循環:遍歷數組或范圍。例如:
echo "a b c" | perl -ane 'foreach $x (@F) { print "$x\n" }'

輸出:

a
b
c

七、語法風格:嚴格 vs 寬松

Perl 的語法風格靈活,支持嚴格和寬松兩種模式。

  • 寬松模式:函數可以省略括號,控制結構(如 iffor)的 {} 在單語句時可省略。例如:
echo "apple" | perl -ne 'print if /a/'

等價于:

echo "apple" | perl -ne 'if (/a/) { print }'
  • 嚴格模式:通過 use strict; 強制變量聲明,避免未定義變量導致的錯誤。one-liner 中通常不啟用嚴格模式以保持簡潔,但在復雜腳本中推薦使用。例如:
perl -e 'use strict; my $x = 42; print $x'

八、綜合示例

以下是一個綜合示例,展示 Perl one-liner 的多種功能。假設輸入為:

name:age:city
Alice:25:New York
Bob:30:London

任務:提取每行的第一個字段(name),并在包含 o 的行前添加時間戳。

echo -e "name:age:city\nAlice:25:New York\nBob:30:London" | perl -F: -lpe '$_ = $F[0]; $_ = "[" . scalar localtime . "] $_" if /o/'

輸出:

name
Alice
[Wed May 14 00:20:00 2025] Bob

解析:

  • -F::按 : 分割每行,存儲到 @F
  • -l:自動換行。
  • -p:逐行處理并打印。
  • $_ = $F[0]:將第一個字段賦值給 $_
  • $_ = "[" . scalar localtime . "] $_" if /o/:若行包含 o,在行前添加時間戳。

九、注意事項與最佳實踐

  1. 默認變量 $_:Perl one-liner 中,許多操作(如 prints///)默認作用于 $_,善用 $_ 可簡化代碼。
  2. 正則表達式優先:Perl 的正則表達式高效且靈活,優先使用正則處理文本。
  3. 測試與調試:one-liner 雖簡潔,但復雜邏輯可能難以調試。建議先在腳本文件中測試,再轉為 one-liner。
  4. 平衡極簡與可讀性:雖然簡寫風格能讓 one-liner 更緊湊,但新手應在初期顯式書寫控制結構和變量,熟悉后再采用簡寫。
  5. 跨平臺兼容性:Perl one-liner 在 Unix/Linux 和 Windows 上均可用,但注意換行符(\n vs \r\n)差異。建議使用 -l 選項自動處理換行符(讀取時 chomp,打印時添加 \n)。

學習資源與社區
Perl one-liner 的學習曲線較陡,新手可通過以下資源加速掌握:

  • 官方文檔perldoc perlrun 詳細說明命令行選項,perldoc perlop 介紹操作符(如 q()s///)。
  • 社區資源:Perl Monks(perlmonks.org)提供大量 one-liner 示例和討論。
  • 實踐工具perl -MO=Deparse 展開簡寫代碼,perl -d -e '代碼' 進入調試模式,幫助理解復雜 one-liner。

十、總結

Perl one-liner 憑借其簡潔的語法和強大的文本處理能力,成為數據處理領域的利器。本文詳細介紹了 Perl one-liner 的基礎語法,包括核心選項(-p-n-a-l)、變量與數組、字符串操作、內置函數、控制結構等內容。通過靈活運用這些語法,開發者可以在命令行中高效完成文本過濾、格式轉換、數據提取等任務。后續可進一步探索 Perl one-liner 在日志分析、數據清洗、系統管理等場景中的應用,充分發揮其潛力。

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

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

相關文章

Go語言defer關鍵字:延遲執行的精妙設計

深度解析Go語言defer關鍵字&#xff1a;延遲執行的精妙設計 引言 在Go語言中&#xff0c;defer語句是一種獨特而強大的控制流機制&#xff0c;它通過??延遲執行??的方式解決資源管理、錯誤處理和異常恢復等關鍵問題。理解defer的工作原理是掌握Go并發編程和錯誤處理的關鍵…

C#項目07-二維數組的隨機創建

實現需求 創建二維數組&#xff0c;數組的列和寬為隨機&#xff0c;數組內的數也是隨機 知識點 1、Random類 Public Random rd new Random(); int Num_Int rd.Next(1, 100);2、數組上下限。 //定義數組 int[] G_Array new int[1,2,3,4];//一維數組 int[,] G_Array_T …

.NET WinForm圖像識別二維碼/條形碼并讀取其中內容

需求:圖像識別出一張圖片中的二維碼或者條形碼&#xff0c;并讀取其中內容。 一、安裝庫(特別注意&#xff0c;網上很多都沒說清楚) 如果是基于.net framework&#xff0c;則安裝ZXing.Net(建議0.14.0版本左右&#xff0c;具體看實際&#xff0c;版本太高&#xff0c;部分接口…

Guava限頻器RateLimiter的使用示例

文章目錄 1. 背景說明2. API與方法3. 示例代碼3.1 基礎工具方法3.2 測試任務類3.3 測試和統計方法3.4 測試兩種模式的限頻器3.5 測試緩沖時間與等待耗時 4. 完整的測試代碼5. 簡單小結 1. 背景說明 高并發應用場景有3大利器: 緩存、限流、熔斷。 也有說4利器的: 緩存、限流、…

(面試)獲取View寬高的幾種方式

Android 中獲取 View 寬高的幾種方式&#xff0c;以及它們的適用場景和注意事項&#xff1a; 1. View.getWidth() 和 View.getHeight() 原理: 直接從 View 對象中獲取已經計算好的寬度和高度。 優點: 簡單直接。 缺點: 在 onCreate()、onStart() 等生命周期方法中&#xff0…

PostgreSQL pgrowlocks 擴展

PostgreSQL pgrowlocks 擴展 pgrowlocks 是 PostgreSQL 的一個系統擴展&#xff0c;用于顯示表中行級鎖定信息。這個擴展特別適合診斷鎖爭用問題和性能調優。 一、擴展安裝與啟用 1. 安裝擴展 -- 使用超級用戶安裝 CREATE EXTENSION pgrowlocks;2. 驗證安裝 -- 查看擴展是…

JavaSE知識總結 ~個人筆記以及不斷思考~持續更新

目錄 字符串常量池 如果是創建對象還會嗎&#xff1f; Integer也是在字串常量池中復用&#xff1f; 字符串拼接 為什么String是不可變的&#xff1f; String的不可變性是怎么做的&#xff1f; 外部代碼不能創建對象&#xff1f; 構造方法不是私有的嗎&#xff1f; 怎么…

使用HTTPS進行傳輸加密

文章目錄 說明示例&#xff08;公網上的公開web&#xff09;安裝SSL證書Certbot 的 Webroot 模式 和 Standalone 模式的區別**Webroot 模式****Standalone 模式** 技術對比表Node.js 場景下的最佳實踐推薦方案&#xff1a;**Webroot 模式**Standalone 模式應急使用&#xff1a;…

驅動開發(2)|魯班貓rk3568簡單GPIO波形操控

上篇文章寫了如何下載內核源碼、編譯源碼的詳細步驟&#xff0c;以及一個簡單的官方demo編譯&#xff0c;今天分享一下如何根據板子的引腳寫自己控制GPIO進行高低電平反轉。 想要控制GPIO之前要學會看自己的引腳分布圖&#xff0c;我用的是魯班貓RK3568&#xff0c;引腳分布圖如…

ArcGIS Pro 3.4 二次開發 - 布局

環境:ArcGIS Pro SDK 3.4 + .NET 8 文章目錄 布局1 布局工程項1.1 引用布局工程項及其關聯的布局1.2 在新視圖中打開布局工程項1.3 激活已打開的布局視圖1.4 引用活動布局視圖1.5 將 pagx 導入工程1.6 移除布局工程項1.7 創建并打開一個新的基本布局1.8 使用修改后的CIM創建新…

OpenCV 圖像像素的算術操作

一、知識點 1、operator (1)、MatExpr operator (const Mat & a, const Mat & b); a、a和b的行數、列數、通道數得相同。 b、a和b的每個像素的每個通道值分別相加。 (2)、MatExpr operator (const Mat & a, const Scalar & s); a、若a…

音視頻中的復用器

&#x1f3ac; 什么是復用器&#xff08;Muxer&#xff09;&#xff1f; 復用器&#xff08;muxer&#xff09;是負責把音頻、視頻、字幕等多個媒體流打包&#xff08;封裝&#xff09;成一個單一的文件格式的組件。 &#x1f4a1; 舉個形象的例子&#xff1a; 假設你有兩樣東…

數據庫安全性

一、計算機安全性概論 &#xff08;一&#xff09;核心概念 數據庫安全性&#xff1a;保護數據庫免受非法使用導致的數據泄露、更改或破壞&#xff0c;是衡量數據庫系統的關鍵指標之一&#xff0c;與計算機系統安全性相互關聯。計算機系統安全性&#xff1a;通過各類安全保護…

【Linux網絡編程】網絡層IP協議

目錄 IP協議的協議頭格式 網段劃分 特殊的IP地址 IP地址的數量限制 私有IP地址和公網IP地址 路由 IP協議的協議頭格式 4位版本號 &#xff1a;指定IP協議的版本&#xff0c;對于IPv4&#xff0c;版本號就是4。 4位首部長度&#xff1a;表名IP協議報頭的長度&#xff0c;單…

“候選對話鏈”(Candidate Dialogue Chain)概念

目錄 一、定義與形式 二、生成過程詳解 1. 語言模型生成&#xff08;LLM-Based Generation&#xff09; 2. 知識圖譜支持&#xff08;KG-Augmented Generation&#xff09; 3. 策略調控&#xff08;Policy-Driven Planning&#xff09; 三、候選對話鏈的屬性 四、候選對…

Unity中的JsonManager

1.具體代碼 先貼代碼 using LitJson; using System.IO; using UnityEngine;/// <summary> /// 序列化和反序列化Json時 使用的是哪種方案 有兩種 JsonUtility 不能直接序列化字典 ligJson可以序列化字典 /// </summary> public enum JsonType {JsonUtilit…

50天50個小項目 (Vue3 + Tailwindcss V4) ? | Split Landing Page(拆分展示頁)

&#x1f4c5; 我們繼續 50 個小項目挑戰&#xff01;—— SplitLandingPage 組件 倉庫地址&#xff1a;https://github.com/SunACong/50-vue-projects 項目預覽地址&#xff1a;https://50-vue-projects.vercel.app/ 在這篇文章中&#xff0c;我們將實現一個交互式的左右面板…

機器學習-ROC曲線?? 和 ??AUC指標

1. 什么是ROC曲線&#xff1f;?? ROC&#xff08;Receiver Operating Characteristic&#xff0c;受試者工作特征曲線&#xff09;是用來評估??分類模型性能??的一種方法&#xff0c;特別是針對??二分類問題??&#xff08;比如“患病”或“健康”&#xff09;。 ?…

Docker容器創建Redis主從集群

利用虛擬機中的三個Docker容器創建主從集群&#xff0c;容器信息&#xff1a; 容器名角色IP映射端口r1master192.168.150.1017001r2slave192.168.150.1017002r3slave192.168.150.1017003 啟動多個redis實例 新建一個docker-compose文件來構建主從集群&#xff1a; 文件內容&…

手寫ArrayList和LinkedList

項目倉庫&#xff1a;https://gitee.com/bossDuy/hand-tear-collection-series 基于b站up生生大佬&#xff1a;https://www.bilibili.com/video/BV1Kp5tzGEc5/?spm_id_from333.788.videopod.sections&vd_source4cda4baec795c32b16ddd661bb9ce865 LinkedList package com…