Linux-文本三劍客(grep、sed、awk)

Linux-文本三劍客

  • 前言
  • 一、grep
  • 二、sed
  • 三、awk
    • 模式 -- 正則表達式
    • 關系表達式、運算符表達
    • 模式匹配表達式
    • 動作 輸出
    • 流程控制
    • 參數傳遞,awk接受外部變量
    • 統計
    • 數組的使用
    • 分組統計
    • 練習
    • 常用內置函數


前言

grep、sed、awk 被稱為 “文本三劍客”,它們是處理文本文件的強大工具,廣泛用于日志分析、數據提取、文本轉換等場景。三者各有側重,常結合管道(|)使用

基于行處理的文本命令

  • grep 過濾文本
  • sed 過濾,替換文本
  • awk 截取文本,統計文本

輸出/etc/passwd文件里的uid大于1000的用戶的信息,輸入格式如下:
username: cali uid: 1001 gid: 1001
awk -F: ‘$3>1000{print “username:”$1,“uid:”$3,“gid:”$4}’ /etc/passwd

while 和 read

IFS 輸入字段分割符 input field separator
[root@hz shell]# cat uid_gid.sh
#!/bin/bash

while IFS=“:” read username x uid gid others
do
if (( uid>1000));thenecho"username:uid > 1000 ));then echo "username:uid>1000));thenecho"username:username uid: $uid gid: $gid"
fi
done </etc/passwd

[root@hz shell]# cat uid_gid_2.sh
#!/bin/bash

cat /etc/passwd|awk -F: ‘{print $1,$3,$4}’|while read username uid gid
do
if (( uid>1000));thenecho"username:uid > 1000 ));then echo "username:uid>1000));thenecho"username:username uid: $uid gid: $gid"
fi
done

截取出根分區的使用率
grep
^ 表示以什么開頭
$ 表示以什么結尾

[root@hz shell]# df |grep “/KaTeX parse error: Expected 'EOF', got '#' at position 72: …[root@hz shell]#? df |grep "/”|awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 5}?' 33% [root@hz …"|awk ‘{print $5}’|tr -d “%”

一、grep

grep 過濾 通用的正則表達式分析程序
grep、egrep、fgrep
做匹配來過濾的

正則表達式:
文本過濾
輸入校驗

pattern 模式 --》模板
可以接受一個正則表達式

用途:在文件中查找并顯示包含指定字符串的行
格式:grep [選項]… 模式 目標文件

  • -i:查找時忽略大小寫
  • -v:反轉查找,輸出與模式不相符的行
  • -n:顯示符合模式要求的行號
  • -r:遞歸搜索所有文件
  • -o:只顯示匹配的內容
  • -E: 支持更多的元字符(支持擴展正則)
  • -A: 找到匹配行以及后幾行
  • -B:輸出匹配行以及前幾行

過濾掉不以#號開頭和行,過濾掉空行

[root@db ~]# egrep -v "^#|^$" sshd_config   
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
DenyUsers  sc
SyslogFacility AUTHPRIV
AuthorizedKeysFile	.ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem	sftp	/usr/libexec/openssh/sftp-server

統計不同狀態碼出現次數

[root@db ~]#egrep -o  "HTTP/1.1\" [1-5][0-9]{2}" access.log-20250828 |sort|uniq -c21 HTTP/1.1" 20038 HTTP/1.1" 3044 HTTP/1.1" 4042 HTTP/1.1" 500

過濾出文檔中的ip地址,ip正則表達式? ipv4 [0-255].[0-255].[0-255].[0-255]
egrep "((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
過濾出/var/log/message中含有error的行,以及error信息的后5行
grep -i -A 5 'error' /var/log/messages


二、sed

sed – 編輯文本,過濾文本 非交互式 方便在腳本中使用

sed命令格式:
直接處理文本
sed [選項] 'command' file

前一個命令的輸出也可以作為sed的輸入
cat file| sed [選項] 'command'

選項

  • -i 直接修改文件內容
  • -n 只打印模式匹配的行
  • -f 將sed的命令寫入一個文件內,從腳本文件中讀取內容并執行
  • -r 支持正則表達式
  • -e 執行多個編輯命令時

sed常用指令 [address]command

  • p – print 打印輸出模塊行
  • 取反 表示后面的命令對選定的行沒有作用
  • n next 讀取下一個輸入的行,用下一個命令處理新的行
  • i\ insert 在當前行的上面插入文本
  • a\ append 在當前行的后面插入文本
  • d delete 刪除行
  • r r filename 從filename讀取 ,將filename的內容放在匹配的行之后
  • w w filename 將匹配到的內容寫入文本
  • N 追加下一行到當前模塊的后面
  • s 替換操作

多條命令進行組合

  • 使用 分號 ;
  • 使用-e
  • 還可以使用 |

address – 確定的范圍
1、空地址 – 全文處理
2、單地址 – 7p
3、步進地址 1~2, 2~2
4、地址對

  • N,M 從第N行到第M行
  • N,+M 從第n行開始向下匹配M行
  • N,/pattern/ 從第n行到 pattern匹配的行 pattern支持正則表達式 使用//包裹起來
  • /pattern1/,/pattern2/ 從pattern1匹配到 pattern2 匹配的行
  • /pattern/ 匹配pattern的行
  • $ 最后一行

打印文件所有行并輸出行號

[root@db ~]# sed -n “p” test.txt
1 aaa abc
2 xxx yyy
3 ppp
4 nihao
5 hello
6 sctl world
7 balabala
8 xixi
9 haha

僅打印第7行

[root@db ~]# sed -n “7p” test.txt
7 balabala

打印所有奇數行

[root@db ~]# sed -n “1~2p” test.txt
1 aaa abc
3 ppp
5 hello
7 balabala
9 haha
[root@db ~]# sed -n “p;n” test.txt
1 aaa abc
3 ppp
5 hello
7 balabala
9 haha

打印所有偶數行

[root@db ~]# sed -n “2~2p” test.txt
2 xxx yyy
4 nihao
6 sctl world
8 xixi
[root@db ~]# sed -n “n;p” test.txt
2 xxx yyy
4 nihao
6 sctl world
8 xixi

打印1到3行

[root@db ~]# sed -n “1,3p” test.txt
1 aaa abc
2 xxx yyy
3 ppp

第 1 行開始,打印當前行 + 后續 3 行

[root@db ~]# sed -n “1,+3p” test.txt
1 aaa abc
2 xxx yyy
3 ppp
4 nihao

從第 1 行開始,打印到 “首次包含字符 s 的行”

[root@db ~]# sed -n “1,/s/p” test.txt
1 aaa abc
2 xxx yyy
3 ppp
4 nihao
5 hello
6 sctl world

打印所有包含字符串 sctl 的行

[root@db ~]# sed -n “/sctl/p” test.txt
6 sctl world

在第 7 行之后插入一行內容 this is test

[root@db ~]# sed “7 a\this is test” test.txt
1 aaa abc
2 xxx yyy
3 ppp
4 nihao
5 hello
6 sctl world
7 balabala
this is test
8 xixi
9 haha

在第 7 行之前插入一行內容 this is test

[root@db ~]# sed “7 i\this is test” test.txt
1 aaa abc
2 xxx yyy
3 ppp
4 nihao
5 hello
6 sctl world
this is test
7 balabala
8 xixi
9 haha

刪除第七行

[root@db ~]# sed “7d” test.txt
1 aaa abc
2 xxx yyy
3 ppp
4 nihao
5 hello
6 sctl world
8 xixi
9 haha

sed替換
[address]s/pattern/replacement/flags
-> 不修改原文件

  • 支持正則表達式,支持分組向后引用
  • & 表示已匹配的字符串
  • flags: 替換標記
  • g 表示行內全面替換
  • p 表示打印行
  • n n表示數字 1~512 表示替換第幾個
  • ng 從第幾個開始替換

在第 1-5 行中,將所有字母 a(小寫)替換為 *

[root@db ~]# sed '1,5s/a/\*/g' test.txt
1 *** *bc
2 xxx yyy
3 ppp
4 nih*o
5 hello
6 sctl  world
7 balabala
8 xixi
9 haha 

在第 1-5 行中,將所有 a、b、c、d(小寫,連續字母范圍)替換為 *

[root@db ~]# sed '1,5s/[a-d]/\*/g' test.txt
1 *** ***
2 xxx yyy
3 ppp
4 nih*o
5 hello
6 sctl  world
7 balabala
8 xixi
9 haha 

直接修改要用 -i 選項
sed -i 's/old/new/g' test.txt

使用 -i 前,建議先執行不加 -i 的命令預覽效果,確認替換正確


三、awk

awk是一種編程語言,對文本、數據進行處理
過濾、統計、截取
內部編程和c語言有相同之處

語法形式:
awk [選項] 'awk命令腳本' file
awk [選項] -f scriptfile file

常用的命令選項:

  • -F 指定分隔符 ,默認空白符
  • -v var=value 將外部變量傳遞給awk
  • -f scripfile 從腳本文件中讀取awk命令

awk命令腳本基本結構體,由三大塊組成
'BEGIN{語句塊} /模式/{動作} END{ 語句塊}'

BEGIN、模式通用語句塊、END 都是可選部分

  • 第一部分:執行BEGIN語句塊中的內容,在處理文本之前,讀取行之前被執行。一般用在初始化變量,打印一些表頭
  • 第二部分:pattern語句塊 通用語句塊,讀取文本的每一行交給這個語句塊處理
  • 第三部分:讀取完所有的行之后執行, 統計、分析結果這些信息在END中完成

以a1.txt為例

[root@docker ~]# cat a1.txt 
1  a1  b1  3
2  a2  b1  4
3  a3  b2  2
4  a1  b2  5
5  a2  b3  4
6  a3  b3  3
[root@docker ~]# awk 'BEGIN{print "start....";print "start2....."}{print $2}END{print "end......"}'  a1.txt
start....
start2.....
a1
a2
a3
a1
a2
a3
end......
[root@docker ~]# awk 'BEGIN{print "start....";print "start2....."}{print $2}'  a1.txt
start....
start2.....
a1
a2
a3
a1
a2
a3
[root@docker ~]# awk '{print $2}'  a1.txt
a1
a2
a3
a1
a2
a3
[root@docker ~]# awk 'BEGIN{print "start....";print "start2....."}'  a1.txt
start....
start2.....
[root@docker ~]# awk 'BEGIN{print 3/2}'  a1.txt
1.5
[root@docker ~]# awk '{print 3/2}'  a1.txt
1.5
1.5
1.5
1.5
1.5
1.5
[root@docker ~]# echo|awk '{print 3/2}' 
1.5
[root@docker ~]# echo|awk '{print 3>2}' 
[root@docker ~]# echo|awk '{print 3<2}' 
0

問題:根據 awk 的邏輯判斷規則,數值比較結果會以 0(假)或 1(真) 輸出,比較結果為假輸出了0,但是比較結果為真并沒有輸出1?

通用語句塊 – 模式和動作

  • 模式 – 過濾:
    /正則表達式/ 可以使用正則表達式匹配
    關系表達式(&& || !)運算符表達式(> < ==)
    模式匹配表達式: 用運算符 ~ !~ (表示匹配或不匹配)

  • 動作:
    動作是由一個或多個命令、表達式組成,命令之間用分號隔開

    • 變量或數組的賦值
    • 輸出
    • 使用內置函數
    • 控制流語句

模式 – 正則表達式

[root@docker ~]# awk -F":" '/ss/{print}' /etc/passwd
dbus:x:81:81:System message bus:/:/sbin/nologin
sssd:x:998:998:User for sssd:/:/sbin/nologin
tss:x:59:59:Account used for TPM access:/:/usr/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin[root@docker ~]# awk -F":" '/^ss/{print}' /etc/passwd
sssd:x:998:998:User for sssd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin

關系表達式、運算符表達

[root@docker ~]# awk -F":" '$3>2000{print $1}' /etc/passwd
[root@docker ~]# awk -F":" '$3==2001{print $1}' /etc/passwd
[root@docker ~]# awk -F":" '$3>1010  && $3 < 2000{print $1}' /etc/passwd
[root@docker ~]# awk -F":" '$3>1010  && $3 < 2000{print}' /etc/passwd

算術運算符 + - * / % ++ –

其他運算符:

  • ?: 類似于javascript的三元運算
  • in
[root@docker ~]# echo |awk 'BEGIN{a="bbb";print a=="bbb"?"ok":"error"}'
ok

模式匹配表達式

[root@docker ~]# awk -F":" '$1 ~ /ss{print}' /etc/passwd
[root@docker ~]# awk -F":" '$1 ~ /^ss/{print}' /etc/passwd
# 找到家目錄不在/home 目錄下的所有用戶信息
[root@docker ~]# awk -F":" '$6 !~ /^\/home\//{print}' passwd
# 找到登錄shell為/bin/bash并且uid大于500的用戶信息
[root@docker ~]# awk -F ':' '$7=="/bin/bash" && $3>500 {print $0}' /etc/passwd

動作 輸出

內部變量:

  • $0 表示整行文本
  • $1 表示分隔出來的第一列文本
  • $n 表示分隔出來的第n列文本
  • NF 每行$0的字段數 (最后一列可表示為$NF)
  • NR 當前處理的行號
  • FS 當前的輸入分隔符,默認是空白字符(空格和tab)field separator
  • OFS 當前的輸出分隔符,默認是空格字符(空格)output field separator
[root@docker ~]# awk '{print "最后一列為:"$NF}' a1.txt
最后一列為:end
最后一列為:4
最后一列為:2
最后一列為:end
最后一列為:4
最后一列為:3
[root@docker ~]# awk '{print "最后一列為:"$NF" "$(NF-1)}' a1.txt
最后一列為:end 3
最后一列為:4 b1
最后一列為:2 b2
最后一列為:end 5
最后一列為:4 b3
最后一列為:3 b3
[root@docker ~]# awk 'NR>3{print "最后一列為:"$NF" "$(NF-1)}' a1.txt
最后一列為:end 5
最后一列為:4 b3
最后一列為:3 b3
[root@docker ~]# awk 'BEGIN{FS=" ";OFS="**"}{print $1,$2}' a1.txt
1**a1
2**a2
3**a3
4**a1
5**a2
6**a3
[root@docker ~]# awk 'BEGIN{FS=" "}{print $1,$2}' a1.txt
1 a1
2 a2
3 a3
4 a1
5 a2
6 a3

流程控制

[root@docker ~]# echo |awk 'BEGIN{
> num=100;
> if(num>90) {
>   print "大于90"
> } else {}
> }'
大于90
[root@docker ~]# echo |awk 'BEGIN{num=100;if(num>90){print "大于90"}else{print "小于等于90"}}'
大于90

參數傳遞,awk接受外部變量

1、使用雙引號
2、使用 -v 選項
3、將變量的接受放后面

[root@docker ~]# a=100
[root@docker ~]# b=200
# 1.雙引號
[root@docker ~]# echo|awk "{print $a+$b}"
300
[root@docker ~]# echo|awk '{print $a+$b}'
0
# 2.-v
# 注意沒有空格
[root@docker ~]# echo|awk -v var1=$a var2=$b '{print var1+var2}'
awk: fatal: cannot open file `{print var1+var2}' for reading: No such file or directory
[root@docker ~]# echo|awk -v var1=$a var2=$b'{print var1+var2}'
300
# 3.變量放后面
# 注意空格 
[root@docker ~]# echo|awk '{print var1+var2}'var1=$a var2=$b
200
[root@docker ~]# echo|awk '{print var1+var2}' var1=$a var2=$b
300

統計

求取a1.txt文件中,第四列的平均值、最大值、最小值

[root@docker ~]# awk 'NR==1{max=$4} {max=($4>max)?$4:max} END{print max}' a1.txt
5
[root@docker ~]# awk 'NR==1{min=$4} {min=($4<min)?$4:min} END{print min}' a1.txt
2
[root@docker ~]# awk 'BEGIN{sum=0;count=0}{sum+=$4;count+=1}END{print sum/count}' a1.txt
3.5

數組的使用

分析、統計
分類聚合

類似python中的字典

arr[1]=“aa”
arr[2]=“bb”
arr[‘a’] = 1 #k-v存儲 key-value
arr[‘b’] = 2

讀取數組

{ for (i in arr){print arr[i]}}
{ for (i=1;i<=len;i++) {print arr[i]}}

# 沒有相應的索引,也可以取值為空
[root@docker ~]# echo |awk 'BEGIN{t1["a"]=1;t2["b"]=2}{if(t1["a"]==1){print "ok"}}'
ok
[root@docker ~]# echo |awk 'BEGIN{t1["a"]=1;t2["b"]=2}{if(t1["a"]==1){print t1["c"]}}'[root@docker ~]# echo |awk 'BEGIN{info["name"]="sc"; info["age"]=7}{print info["name"]}'
sc
[root@docker ~]# echo |awk 'BEGIN{info["name"]="sc"; info["age"]=18}{print info["age"]}'
18
[root@docker ~]# echo |awk 'BEGIN{info["name"]="sc"; info["age"]=7}{print info["sex"]}'# 判斷屬組中有沒有這個key  -- in
[root@docker ~]# echo | awk 'BEGIN{info["name"]="sc";info["age"]=18}{if("name" in info){print "yes"}}'
yes

分組統計

[root@docker ~]# cat stu.txt
工號  姓名 性別  部門   工資
1     張三  女    SA     8000
2     李四  男    PE     7000
3     王二  女    SA     9000
4     小李  男    PE     8000
5     小張  女    PE     9000
6     小謝  男    SA     9000
7     小米  男    SA     8000
5     小陳  女    PE     7000
[root@docker ~]# awk 'NR>1{ stuff[$3]+=$4 } END{ for(i in stuff) {print i"-->"stuff[i] }}' stu.txt
男-->0
女-->0
[root@docker ~]# awk 'NR>1{ stuff[$3]+=$5 } END{ for(i in stuff) {print i"-->"stuff[i] }}' stu.txt
男-->32000
女-->33000# 統計每個部門,每個性別 各發出去多少工資      --  按什么分組,就以什么作為key
[root@docker ~]# awk 'NR>1{ stuff[$3"--"$4]+=$5 } END{ for(i in stuff) {print i"-->"stuff[i] }}' stu.txt
女--SA-->17000
女--PE-->16000
男--SA-->17000
男--PE-->15000

練習

# 統計本機各個連接狀態的數量
netstat -anplt|awk 'NR>2{ state[$6]++} END{ for(i in state) {print i"-->"state[i] }}'
LISTEN-->27
ESTABLISHED-->70# 降序統計客戶端 IP 的訪問次數
cat access.log | awk '{print $1}'|sort|uniq -c|sort -rn# 降序統計 Referer 中含 IP 地址的訪問次數
cat access.log | awk '{print $11}'|sort|uniq -c|egrep  "((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|sort -rn# 統計nginx訪問日志的每分鐘,每個路徑訪問次數
awk -F"[ :]" '{count[$4$5"--"$10]++}END{for(i in count){print i":"count[i]}}' access.log

常用內置函數

算術相關: int(x)

  • rand() 0<=n<1
  • sqrt() 開平方

字符串相關:

  • length(string) 長度
  • split(string, A,[指定的分隔符]) 切割字符串
  • substr(string, M, [N]) 對string進行截取,從M的位置開始,截取N個

統計access.log日志中,每個小時,每個路徑訪問次數

awk '{count[substr($4,2,14)"--"$7]++}END{for(i in count){print i":"count[i]}}' scwebsite2_ssl.log 

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

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

相關文章

主流反爬蟲、反作弊防護與風控對抗手段

文章目錄1. 寫在前面2. 指紋檢測3. 行為驗證3. 加固防護4. 鏈路檢測5. 風控埋點6. 游客注冊7. 數據防護8. 賬號權重9. 反調阻斷【&#x1f3e0;作者主頁】&#xff1a;吳秋霖 【&#x1f4bc;作者介紹】&#xff1a;擅長爬蟲與JS加密逆向分析&#xff01;Python領域優質創作者、…

金蝶云星空插件開發記錄(一)

實現目的&#xff1a;新增供應商保存后&#xff0c;觸發釘釘審批流程&#xff0c;并根據釘釘審批結果回寫是否合格供應商。實現思路&#xff1a;通過BOS平臺供在應商管理界面新增兩個復選框字段&#xff1a;是否釘釘審批、是否合格供應商&#xff0c;若在新建供應商檔案時勾選是…

企業跨區域組網新解:SD-WAN技術打造安全穩定網絡體系

前言在數字化浪潮席卷全球的今天&#xff0c;企業跨區域網絡互聯已成為支撐業務發展的關鍵基礎設施。傳統MPLS專線雖性能穩定&#xff0c;但高昂成本和漫長部署周期令眾多企業望而卻步。SD-WAN技術的出現&#xff0c;正以其智能、靈活和成本效益的優勢&#xff0c;重塑企業組網…

Docker 容器化

引言在解釋docker是什么之前&#xff0c;我們首先應該先了解的是容器化的概念。什么是容器&#xff1f;就是一個沙箱&#xff0c;在這個沙箱中涵蓋了特定應用運行的一切依賴的內容。但他不是一個操作系統&#xff0c;且和底層的操作系統是隔離的。什么是容器化&#xff1f;容器…

LeetCode刷題——hot 100(3)

題目1&#xff1a;矩陣置零題目&#xff1a;問題分析&#xff1a;使用兩個布爾數組來分別記錄哪行哪列出現了0&#xff0c;當出現0的行和列&#xff0c;對應的布爾數組值置為true。再次遍歷數組&#xff0c;當出現行數組和列數組中的值為true&#xff0c;則對應的原數組的值置為…

Ajax-day2(圖書管理)-渲染列表

本篇筆記素材來自“黑馬程序員” 渲染列表圖書管理一、獲取數據二、渲染數據完整代碼圖書管理 Bootstrap 框架渲染列表&#xff08;查&#xff09;新增圖書&#xff08;增&#xff09;刪除圖書&#xff08;刪&#xff09;編輯圖書&#xff08;改&#xff09; 自己的圖書數據&a…

MOS管的電路

MOS管的三極都會存在以下三個電容&#xff0c;分別是&#xff1a;Cgs,Cgd,Cds 輸入電容CissCgsCgd 輸出電容CossCgdCds 反向傳輸電容CrssCgd&#xff0c;也叫米勒電容 然而&#xff0c;這三個等效電容是構成串并聯組合關系&#xff0c;他們并不是獨立的&#xff0c;而是相互…

STM32_05_時鐘樹

時鐘 d用來輸入數據&#xff0c;CLK就是我們的時鐘&#xff0c;CPU1s中72000000HZ個時鐘周期STM32的時鐘樹鎖相環HSE時鐘源HSI時鐘源LSE時鐘源LSI時鐘源SystemInit函數SetSysClock函數SetSysClockTo72函數SystemInit()后時鐘頻率大小總結RCC標準庫函數定義變量a&…

C語言---判斷語句

文章目錄1. if 語句2. if...else 語句3. if...else if...else 語句4. switch 語句5. 三元運算符 ( ? : )總結與對比如何選擇C語言中的判斷語句用于根據給定的條件來決定執行哪一段代碼。其核心是條件為真&#xff08;必須&#xff09;則執行一段代碼&#xff0c;條件為假&…

[硬件電路-212]:電流的本質確實是電子的移動

1. 微觀機制&#xff1a;電子的定向漂移與熱運動定向漂移&#xff08;Drift Motion&#xff09;&#xff1a;在導體&#xff08;如金屬&#xff09;中&#xff0c;自由電子&#xff08;價電子&#xff09;受電場驅動&#xff0c;從負端向正端定向移動&#xff0c;形成宏觀電流。…

雙RFSOC47DR-16通道5GSPS ADC采集模塊

16通道5GSPS ADC采集板卡組成如圖1所示。該板卡的輸入接口為SMA單端輸入&#xff0c;ADC采集和處理采用Xilinx公司的XCZU47DR-2FFVE1156I芯片。板卡需配備4路QSFP28光口輸出&#xff0c;并需要集成網口、DDR4、SD卡、USB調試口。兩塊RF-Soc需確保連接通信功能。板卡的16通道需實…

pytest -- 中文文檔

前言 零基礎1小時快速入門pytest自動化測試教程&#xff0c;全套項目框架實戰pytest配置文件可以改變pytest的運行方式&#xff0c;它是一個固定的文件pytest.ini文件&#xff0c;讀取配置信息&#xff0c;按指定的方式去運行 非test文件 pytest里面有些文件是非test文件 pyt…

硬件開發2-ARM裸機開發3-IMX6ULL - 引入中斷

一、鋪墊引入中斷 → 按鍵1、概要&#xff1a;實現按鍵控制發光二極管和蜂鳴器輸入類型的外設&#xff1a;按鍵&#xff08;key&#xff09;2、參考手冊內容完成配置過程&#xff08;1&#xff09;key 按鍵原理圖&#xff08;2&#xff09;core 內核中命名 -- UART1 CTS&#x…

Ansible的 Playbook 模式詳解

目錄一、Playbook模式1.1 Playbook 的優勢1.2 Playbook 的組成1.3 安裝 httpd 服務案例1.4 Playbook 命令及常用參數1.5 Playbook 的語法 —— 權限相關1. remote_user2. become3. become_method1.6 Playbook 的通知與觸發機制1. notify2. handlers3. 使用示例4. 使用場景1.6 P…

猿輔導Java后臺開發面試題及參考答案

int 與 Integer 的區別是什么&#xff1f;若創建數量龐大的數字時使用 Integer&#xff0c;會對重復數字創建新對象嗎&#xff1f;int 是 Java 中的基本數據類型&#xff0c;直接存儲數值&#xff0c;占用 4 個字節&#xff0c;默認值為 0&#xff0c;不需要通過 new 關鍵字創建…

代碼隨想錄學習摘抄day9(回溯1-11)

一個樸實無華的目錄定義&#xff1a;回溯法也可以叫做回溯搜索法&#xff0c;它是一種搜索的方式。應用場景&#xff1a;回溯法解決的問題都可以抽象為樹形結構代碼模板題型第77題. 組合思路&#xff1a;每次從集合中選取元素&#xff0c;可選擇的范圍隨著選擇的進行而收縮&…

Altium Designer(AD24)打開工程文件的幾種方法

??《專欄目錄》 目錄 1,概述 2,源文件 2,菜單欄 4,工具欄 5,注意事項 1,概述 本文介紹幾種打開工程文件的方法。 2,源文件 找到工程的源文件存儲路徑,找到.PrjPcb的源工程文件,雙擊打開。 2,菜單欄 第1步:執行File→Open, 第2步:找到工程文件的存儲路徑,并選中…

Linux嵌入式自學筆記(基于野火EBF6ULL):2.點燈與ubuntu安裝

一、點燈登錄root&#xff1a;賬號&#xff1a;root ; 密碼&#xff1a;root點燈命令&#xff1a;echo 0 > /sys/class/leds/red/brightness #關閉red燈 echo 0 > /sys/class/leds/blue/brightness #關閉blue燈 echo 0 > /sys/class/leds/green/brightness …

【Java實戰?】Java實戰:MyBatis-Plus 開啟MySQL數據庫高效操作之旅

目錄 一、MyBatis-Plus 環境集成 1.1 項目依賴引入 1.2 數據庫配置 1.3 代碼生成器使用 二、核心 CRUD 操作實現 2.1 基礎查詢 2.2 數據新增與修改 2.3 復雜查詢場景 三、性能優化與高級特性 3.1 緩存配置 3.2 樂觀鎖實現 3.3 字段自動填充 四、實戰案例:用戶管理模塊開發 4.1…

開學季干貨——知識梳理與經驗分享

技術文章大綱&#xff1a;開學季干貨——知識梳理與經驗分享目標受眾分析明確文章面向的學生群體&#xff08;如大學生、高中生&#xff09; 分析不同群體的核心需求&#xff08;課程準備、時間管理、工具使用&#xff09; 結合技術場景&#xff08;如數字筆記、在線協作&#…