shell編程正則表達(dá)式與文本處理器完全解析
前言
在shell編程的世界里,正則表達(dá)式與文本處理器是兩大不可或缺的利器。正則表達(dá)式(Regular Expression,簡稱RE)作為一種強(qiáng)大的字符串匹配工具,能夠通過特定的字符串合來描述和匹配一系列符合特定的規(guī)則的字符串。它不僅腳本編程中表演著重要角色,還是文本編輯器及多種程序設(shè)計(jì)語言中的核心功能之一
一、正則表達(dá)式基礎(chǔ)
1. 什么是正則表達(dá)式
正則表達(dá)式(Regular Expression,簡稱 Regex)是一種用于匹配、查找和處理文本的強(qiáng)大工具。在 Shell 編程中,它是處理文本數(shù)據(jù)的核心技術(shù)之一,廣泛應(yīng)用于日志分析、數(shù)據(jù)提取、文本替換等場景。正則表達(dá)式的核心思想是使用特定的字符組合來描述文本的模式,從而實(shí)現(xiàn)對(duì)文本的精準(zhǔn)操作。
2. 正則表達(dá)式的分類
在 Linux 系統(tǒng)中,正則表達(dá)式主要分為兩類:
表格
| 類型 | 說明 | 適用工具 |
|---|---|---|
| 基礎(chǔ)正則表達(dá)式(BRE) | 功能相對(duì)基礎(chǔ),元字符較少,部分元字符需要轉(zhuǎn)義 | grep、sed、vi 等 |
| 擴(kuò)展正則表達(dá)式(ERE) | 功能更豐富,支持更多元字符,無需轉(zhuǎn)義 | egrep、awk、sed -r 等 |
3. 基礎(chǔ)正則表達(dá)式元字符
基礎(chǔ)正則表達(dá)式是正則表達(dá)式的核心,掌握這些元字符是使用正則表達(dá)式的基礎(chǔ)。
表格
| 元字符 | 作用 | 示例 |
|---|---|---|
^ | 匹配行首,錨定到行的開始位置 | ^root 匹配以 root 開頭的行 |
$ | 匹配行尾,錨定到行的結(jié)束位置 | nologin$ 匹配以 nologin 結(jié)尾的行 |
. | 匹配任意單個(gè)字符(換行符除外) | r..t 匹配 root、rbot、r56t 等 |
* | 匹配前一個(gè)字符 0 次或多次,包括 0 次 | ro*t 匹配 rt、rot、root、rooot 等 |
[] | 匹配方括號(hào)內(nèi)任意一個(gè)字符,支持范圍表示 | [Rr]oot 匹配 Root 或 root;[0-9] 匹配任意數(shù)字 |
[^] | 匹配不在方括號(hào)內(nèi)的任意字符,即取反 | [^0-9] 匹配非數(shù)字字符;[^a-z] 匹配非小寫字母 |
\{n\} | 匹配前一個(gè)字符恰好 n 次,n 為非負(fù)整數(shù) | o\{2\} 匹配兩個(gè)連續(xù)的 o,如 "oo" |
\{n,\} | 匹配前一個(gè)字符至少 n 次,n 為非負(fù)整數(shù) | o\{2,\} 匹配兩個(gè)或更多連續(xù)的 o,如 "oo"、"ooo" 等 |
\{n,m\} | 匹配前一個(gè)字符 n 到 m 次,n≤m,均為非負(fù)整數(shù) | o\{2,3\} 匹配兩個(gè)或三個(gè)連續(xù)的 o |
4. 擴(kuò)展正則表達(dá)式元字符
擴(kuò)展正則表達(dá)式在基礎(chǔ)正則表達(dá)式的基礎(chǔ)上增加了更多功能,使用起來更加靈活。
表格
| 元字符 | 作用 | 示例 | |
|---|---|---|---|
+ | 匹配前一個(gè)字符 1 次或多次,至少 1 次 | go+gle 匹配 gogle、google、goooogle 等 | |
? | 匹配前一個(gè)字符 0 次或 1 次,最多 1 次 | colou?r 匹配 color 或 colour | |
() | 分組,將多個(gè)字符作為一個(gè)整體進(jìn)行匹配和引用 | (go)+ 匹配 go、gogo、gogogo 等;(123)\1 匹配 "123123" | |
| ` | ` | 或操作,匹配其中一個(gè)選項(xiàng) | root|admin 匹配 root 或 admin;a|b 匹配 a 或 b |
5. 正則表達(dá)式的優(yōu)先級(jí)
正則表達(dá)式的元字符有不同的優(yōu)先級(jí),從高到低依次為:
- 轉(zhuǎn)義符
\ - 分組
() - 限定符
*、+、?、{n}、{n,}、{n,m} - 錨點(diǎn)
^、$ - 或操作
|
了解優(yōu)先級(jí)有助于正確構(gòu)建復(fù)雜的正則表達(dá)式。
二、文本處理工具:sed
1. sed 簡介
sed(Stream Editor)是一個(gè)流編輯器,主要用于對(duì)輸入流(文件或管道輸入)進(jìn)行基本的文本轉(zhuǎn)換。它逐行處理輸入,并將結(jié)果輸出到標(biāo)準(zhǔn)輸出。sed 是一個(gè)非交互式的編輯器,非常適合在腳本中使用。
2. sed 的工作原理
sed 的工作流程可以分為以下幾個(gè)步驟:
- 從輸入流中讀取一行內(nèi)容到模式空間(pattern space)
- 根據(jù)提供的編輯指令對(duì)模式空間中的內(nèi)容進(jìn)行處理
- 將處理后的內(nèi)容輸出到標(biāo)準(zhǔn)輸出(默認(rèn)情況下)
- 清空模式空間,讀取下一行,重復(fù)上述過程
此外,sed 還有一個(gè)保持空間(hold space),用于臨時(shí)存儲(chǔ)數(shù)據(jù),可以在處理過程中與模式空間進(jìn)行數(shù)據(jù)交換,實(shí)現(xiàn)更復(fù)雜的文本處理。
3. sed 的基本語法
sed [選項(xiàng)] '模式或編輯指令' 文件1 文件2... sed -f 腳本文件 文件1 文件2...
常用選項(xiàng):
表格
| 選項(xiàng) | 作用 |
|---|---|
-n | 只輸出經(jīng)過處理的行,默認(rèn)輸出所有行 |
-e | 允許多個(gè)編輯指令,多個(gè)指令之間用分號(hào)分隔 |
-f | 從腳本文件中讀取編輯指令,適合復(fù)雜的 sed 腳本 |
-i | 直接修改原文件,而不是輸出到標(biāo)準(zhǔn)輸出,使用時(shí)需謹(jǐn)慎 |
-r | 支持?jǐn)U展正則表達(dá)式,否則默認(rèn)使用基礎(chǔ)正則表達(dá)式 |
-s | 將多個(gè)輸入文件視為獨(dú)立的流,而不是一個(gè)連續(xù)的流 |
4. sed 的編輯指令
sed 的編輯指令非常豐富,涵蓋了文本處理的各個(gè)方面。
表格
| 指令 | 作用 | 示例 |
|---|---|---|
p | 打印匹配的行,通常與-n選項(xiàng)配合使用 | sed -n '/root/p' /etc/passwd |
d | 刪除匹配的行 | sed '/^#/d' test.txt |
s | 替換匹配的字符串,是 sed 最常用的指令 | sed 's/old/new/g' test.txt |
a | 在匹配行后添加內(nèi)容,支持多行添加 | sed '/^root/a\New line' test.txt |
i | 在匹配行前插入內(nèi)容,支持多行插入 | sed '/^root/i\New line' test.txt |
c | 替換匹配的整行,將匹配行替換為新內(nèi)容 | sed '/^root/c\New line' test.txt |
y | 按字符轉(zhuǎn)換,將字符一一對(duì)應(yīng)轉(zhuǎn)換 | sed 'y/abc/ABC/' test.txt |
= | 打印匹配行的行號(hào) | sed -n '/error/=' /var/log/messages |
r | 從文件中讀取內(nèi)容并插入到匹配行后 | sed '/^#/r header.txt' test.txt |
w | 將匹配行寫入到文件中 | sed -n '/error/w error.log' /var/log/messages |
5. sed 用法示例
(1) 輸出文本
# 輸出包含root的行
sed -n '/root/p' /etc/passwd
# 輸出第1到3行
sed -n '1,3p' /etc/passwd
# 輸出奇數(shù)行
sed -n '1~2p' test.txt
# 輸出最后一行
sed -n '$p' test.txt
# 輸出包含"error"的行及其行號(hào)
sed -n '/error/{=;p}' /var/log/messages(2) 刪除文本
# 刪除空行 sed '/^$/d' test.txt # 刪除以#開頭的注釋行 sed '/^#/d' test.txt # 刪除第2行 sed '2d' test.txt # 刪除第1到5行 sed '1,5d' test.txt # 刪除從匹配行到文件末尾的所有行 sed '/^#/,$d' test.txt
(3) 替換文本
# 全局替換old為new sed 's/old/new/g' test.txt # 只替換每行的第一個(gè)匹配 sed 's/old/new/' test.txt # 替換第1到5行中的old為new sed '1,5s/old/new/g' test.txt # 使用擴(kuò)展正則表達(dá)式替換 sed -r 's/(root|admin)/user/g' /etc/passwd # 替換行首的空格為制表符 sed 's/^ /\t/' test.txt # 將每行的第一個(gè)單詞轉(zhuǎn)換為大寫 sed 's/^[a-z]/\U&/' test.txt
(4) 插入和追加文本
# 在第1行前插入內(nèi)容 sed '1i\This is the first line' test.txt # 在最后一行后追加內(nèi)容 sed '$a\This is the last line' test.txt # 在包含root的行后追加內(nèi)容 sed '/root/a\This is a root line' /etc/passwd # 在匹配行前插入多行內(nèi)容 sed '/^#/i\# This is a comment\n# Added by sed' test.txt
(5) 高級(jí)用法:使用保持空間
# 反轉(zhuǎn)文件行序
sed '1!G;h;$!d' test.txt
# 將匹配行與下一行合并
sed '/pattern/{N;s/\n/ /}' test.txt三、文本處理工具:awk
1. awk 簡介
awk 是一種編程語言,專門用于文本處理和數(shù)據(jù)提取。它比 sed 更強(qiáng)大,可以對(duì)文本進(jìn)行更復(fù)雜的分析和處理。awk 的名字來源于其創(chuàng)始人 Alfred Aho、Peter Weinberger 和 Brian Kernighan 的姓氏首字母。
2. awk 的工作原理
awk 的工作流程可以分為以下幾個(gè)階段:
- BEGIN 塊:在處理輸入數(shù)據(jù)之前執(zhí)行一次,通常用于初始化變量、打印表頭等。
- 主體處理:逐行讀取輸入數(shù)據(jù),將每行數(shù)據(jù)按照指定的分隔符分割成多個(gè)字段($1, $2, ...),然后根據(jù)提供的模式和動(dòng)作對(duì)數(shù)據(jù)進(jìn)行處理。
- END 塊:在處理完所有輸入數(shù)據(jù)之后執(zhí)行一次,通常用于輸出統(tǒng)計(jì)結(jié)果、打印表尾等。
3. awk 的基本語法
awk 選項(xiàng) '模式或條件 {編輯指令}' 文件1 文件2...
awk -f 腳本文件 文件1 文件2...常用選項(xiàng):
表格
| 選項(xiàng) | 作用 |
|---|---|
-F | 指定字段分隔符,默認(rèn)是空格或制表符 |
-v | 定義變量并賦值,可以在 awk 程序中使用 |
-f | 從腳本文件中讀取 awk 程序,適合復(fù)雜的 awk 腳本 |
4. awk 的內(nèi)置變量
awk 提供了許多內(nèi)置變量,方便我們處理文本數(shù)據(jù)。
表格
| 變量 | 作用 |
|---|---|
FS | 字段分隔符(Field Separator),默認(rèn)是空格或制表符 |
NF | 當(dāng)前行的字段個(gè)數(shù)(Number of Fields) |
NR | 當(dāng)前處理的行號(hào)(Number of Records),從 1 開始遞增 |
FNR | 當(dāng)前文件的行號(hào)(File Number of Records),處理多個(gè)文件時(shí)有用 |
$0 | 當(dāng)前行的整行內(nèi)容 |
$n | 當(dāng)前行的第 n 個(gè)字段(第 n 列),n 從 1 開始 |
FILENAME | 當(dāng)前處理的文件名 |
RS | 數(shù)據(jù)記錄分隔符(Record Separator),默認(rèn)是換行符 |
OFS | 輸出字段分隔符(Output Field Separator),默認(rèn)是空格 |
ORS | 輸出記錄分隔符(Output Record Separator),默認(rèn)是換行符 |
5. awk 的模式和動(dòng)作
awk 程序由一系列 "模式 - 動(dòng)作" 對(duì)組成:
plaintext
模式 { 動(dòng)作 } - 模式:用于匹配輸入行的條件,可以是正則表達(dá)式、比較表達(dá)式、邏輯表達(dá)式、BEGIN 塊、END 塊等。如果模式匹配成功,則執(zhí)行對(duì)應(yīng)的動(dòng)作。
- 動(dòng)作:當(dāng)模式匹配時(shí)執(zhí)行的命令,通常是打印或處理數(shù)據(jù)。動(dòng)作由大括號(hào)包裹,包含一個(gè)或多個(gè) awk 語句。
如果省略模式,動(dòng)作將對(duì)所有行執(zhí)行;如果省略動(dòng)作,默認(rèn)動(dòng)作是打印整行({print $0})。
6. awk 的常用函數(shù)
awk 提供了許多內(nèi)置函數(shù),方便我們處理字符串、數(shù)學(xué)運(yùn)算等。
表格
| 函數(shù)類型 | 函數(shù)名 | 作用 |
|---|---|---|
| 字符串函數(shù) | length(str) | 返回字符串 str 的長度 |
substr(str, start, length) | 返回字符串 str 中從 start 位置開始,長度為 length 的子串 | |
index(str, substr) | 返回子串 substr 在字符串 str 中第一次出現(xiàn)的位置 | |
split(str, arr, sep) | 將字符串 str 按照分隔符 sep 分割成數(shù)組 arr | |
gsub(pattern, replacement, str) | 在字符串 str 中全局替換 pattern 為 replacement | |
sub(pattern, replacement, str) | 在字符串 str 中替換第一個(gè) pattern 為 replacement | |
| 數(shù)學(xué)函數(shù) | sin(x) | 返回 x 的正弦值 |
cos(x) | 返回 x 的余弦值 | |
sqrt(x) | 返回 x 的平方根 | |
rand() | 返回 0 到 1 之間的隨機(jī)數(shù) | |
srand(x) | 設(shè)置隨機(jī)數(shù)種子 | |
| 時(shí)間函數(shù) | mktime(str) | 將字符串 str 轉(zhuǎn)換為時(shí)間戳 |
strftime(format, timestamp) | 將時(shí)間戳轉(zhuǎn)換為指定格式的字符串 |
7. awk 用法示例
(1) 按行輸出文本
# 輸出所有內(nèi)容,等同于cat test.txt
awk '{print}' test.txt
awk '{print $0}' test.txt
# 輸出第1到3行
awk 'NR==1,NR==3{print}' test.txt
awk '(NR>=1)&&(NR<=3){print}' test.txt
# 輸出第1行和第3行
awk 'NR==1||NR==3{print}' test.txt
# 輸出所有奇數(shù)行
awk '(NR%2)==1{print}' test.txt
# 輸出所有偶數(shù)行
awk '(NR%2)==0{print}' test.txt
# 輸出以root開頭的行
awk '/^root/{print}' /etc/passwd
# 輸出以nologin結(jié)尾的行
awk '/nologin$/{print}' /etc/passwd
# 統(tǒng)計(jì)以/bin/bash結(jié)尾的行數(shù)
awk 'BEGIN {x=0};/\/bin\/bash$/{x++};END {print x}' /etc/passwd
# 統(tǒng)計(jì)文件中的空行數(shù)
awk 'BEGIN {x=0};/^$/{x++};END {print x}' test.txt(2) 按字段輸出文本
# 輸出每行中(以空格或制表符分隔)的第3個(gè)字段
awk '{print $3}' test.txt
# 輸出每行中的第1、3個(gè)字段
awk '{print $1,$3}' test.txt
# 輸出密碼為空的用戶記錄
awk -F ":" '$2==""{print}' /etc/shadow
awk 'BEGIN {FS=":"}; $2==""{print}' /etc/shadow
# 輸出以冒號(hào)分隔且第7個(gè)字段中包含bash的行的第1個(gè)字段
awk -F ":" '$7~"/bash"{print $1}' /etc/passwd
# 輸出包含8個(gè)字段且第1個(gè)字段中包含nfs的行的第1、2個(gè)字段
awk '($1~"nfs")&&(NF==8){print $1,$2}' /etc/services
# 輸出第7個(gè)字段既不是/bin/bash也不是/sbin/nologin的所有行
awk -F ":" '($7!="/bin/bash")&&($7!="/sbin/nologin"){print}' /etc/passwd
# 計(jì)算文件中所有數(shù)字的總和
awk '{sum += $1} END {print sum}' numbers.txt(3) 通過管道、雙引號(hào)調(diào)用 Shell 命令
# 調(diào)用wc -l命令統(tǒng)計(jì)使用bash的用戶個(gè)數(shù)
awk -F: '/bash$/{print | "wc -l"}' /etc/passwd
# 調(diào)用who命令并統(tǒng)計(jì)在線用戶數(shù)
awk 'BEGIN {while ("who" | getline) n++ ; {print n-2}}'
# 調(diào)用hostname并輸出當(dāng)前主機(jī)名
awk 'BEGIN {"hostname" | getline ; print $0}'
# 遍歷目錄下的所有文件并輸出文件名
awk 'BEGIN {while ("ls" | getline) print $0}'(4) 高級(jí)用法:處理多文件和格式化輸出
# 處理多個(gè)文件,輸出每個(gè)文件的文件名和行數(shù)
awk '{lines[FILENAME]++} END {for (file in lines) print file ": " lines[file]}' file1.txt file2.txt file3.txt
# 格式化輸出,將數(shù)據(jù)對(duì)齊輸出
awk '{printf "%-15s %-10s %-5d\n", $1, $2, $3}' data.txt四、正則表達(dá)式與文本處理實(shí)戰(zhàn)案例
案例 1:提取系統(tǒng)用戶信息
從 /etc/passwd 文件中提取用戶名、用戶 ID、組 ID 和登錄 shell:
awk -F ':' '{printf "%-15s %-5d %-5d %-20s\n", $1, $3, $4, $7}' /etc/passwd 案例 2:統(tǒng)計(jì)日志文件中的錯(cuò)誤次數(shù)
從系統(tǒng)日志 /var/log/messages 中統(tǒng)計(jì)包含 "error"、"warning" 和 "info" 的行數(shù):
awk '/error/{error++} /warning/{warning++} /info/{info++} END {print "Errors: " error, "Warnings: " warning, "Info: " info}' /var/log/messages 案例 3:批量修改文件名
將當(dāng)前目錄下所有.txt 文件的擴(kuò)展名改為.bak:
ls *.txt | awk '{print "mv", $0, substr($0, 1, length($0)-4) ".bak"}' | sh 案例 4:提取 CSV 文件中的特定列并計(jì)算平均值
從 data.csv 文件中提取第 2 列和第 4 列數(shù)據(jù),并計(jì)算第 4 列的平均值:
awk -F ',' '{sum += $4; print $2, $4} END {print "Average: " sum/NR}' data.csv 案例 5:替換配置文件中的參數(shù)值
將 nginx.conf 文件中的 worker_processes 值從 1 修改為 4,并將 worker_connections 從 1024 修改為 4096:
sed -i -e 's/worker_processes 1;/worker_processes 4;/' -e 's/worker_connections 1024;/worker_connections 4096;/' nginx.conf
案例 6:分析 Apache 訪問日志
從 Apache 訪問日志中統(tǒng)計(jì)每個(gè) IP 地址的訪問次數(shù),并按次數(shù)從高到低排序:
awk '{print $1}' access.log | sort | uniq -c | sort -nr 案例 7:提取 HTML 文件中的鏈接
從 index.html 文件中提取所有的鏈接(href 屬性值):
grep -o 'href="[^"]*"' index.html | sed 's/href="http://;s/"$//'
案例 8:處理多行日志
將多行日志合并為單行,方便后續(xù)處理:
sed -n '/^[0-9]/ {x;p;d}; H' app.log 五、sed 與 awk 的對(duì)比與選擇
1. 核心差異
表格
| 特性 | sed | awk |
|---|---|---|
| 處理單位 | 以行為單位 | 以字段為單位 |
| 主要功能 | 文本替換、刪除、插入、追加等 | 數(shù)據(jù)提取、統(tǒng)計(jì)、分析、格式化輸出等 |
| 編程能力 | 簡單的腳本能力 | 完整的編程語言能力,支持變量、數(shù)組、函數(shù)、控制流等 |
| 適用場景 | 簡單的文本轉(zhuǎn)換和行操作 | 復(fù)雜的數(shù)據(jù)處理和分析 |
2. 選擇建議
選擇 sed 的場景:
- 需要對(duì)文本進(jìn)行簡單的替換、刪除、插入或追加操作
- 處理的文本以行為單位,不需要對(duì)行內(nèi)的字段進(jìn)行復(fù)雜處理
- 需要編寫簡潔高效的腳本
選擇 awk 的場景:
- 需要從文本中提取特定字段并進(jìn)行統(tǒng)計(jì)、分析或計(jì)算
- 需要處理格式化的數(shù)據(jù)(如 CSV、日志文件等)
- 需要進(jìn)行復(fù)雜的文本處理和數(shù)據(jù)轉(zhuǎn)換
- 需要編寫更復(fù)雜的邏輯和控制流
六、總結(jié)與進(jìn)階建議
正則表達(dá)式和文本處理工具是 Linux Shell 編程中不可或缺的核心技能。通過掌握正則表達(dá)式的元字符和語法,以及 sed 和 awk 這兩個(gè)強(qiáng)大的文本處理工具,我們可以高效地處理各種文本數(shù)據(jù),完成復(fù)雜的文本分析和轉(zhuǎn)換任務(wù)。
- sed:以行為單位進(jìn)行文本處理,擅長文本替換、刪除、插入和追加等操作,是處理行級(jí)文本的利器。
- awk:以字段為單位進(jìn)行文本處理,擅長數(shù)據(jù)提取、統(tǒng)計(jì)和分析,是處理結(jié)構(gòu)化文本數(shù)據(jù)的強(qiáng)大工具。
在實(shí)際工作中,我們可以根據(jù)具體需求選擇合適的工具和方法。對(duì)于簡單的文本替換和行操作,sed 通常更高效;對(duì)于復(fù)雜的數(shù)據(jù)提取和分析,awk 則更為強(qiáng)大。同時(shí),將正則表達(dá)式與這些工具結(jié)合使用,可以發(fā)揮出更大的威力。
進(jìn)階建議
- 多練習(xí):通過大量的實(shí)戰(zhàn)案例來熟悉正則表達(dá)式和文本處理工具的使用,積累經(jīng)驗(yàn)。
- 閱讀官方文檔:深入學(xué)習(xí) sed 和 awk 的官方文檔,了解更多高級(jí)功能和用法。
- 學(xué)習(xí) awk 編程:掌握 awk 的編程特性,如變量、數(shù)組、函數(shù)、控制流等,編寫更復(fù)雜的文本處理腳本。
- 結(jié)合其他工具:將 sed、awk 與 grep、sort、uniq、cut 等工具結(jié)合使用,構(gòu)建更強(qiáng)大的文本處理管道。
- 編寫腳本:將常用的文本處理操作編寫成腳本,提高工作效率,避免重復(fù)勞動(dòng)。
掌握這些技能,將使我們在 Linux 系統(tǒng)管理、自動(dòng)化腳本編寫和數(shù)據(jù)處理等工作中更加得心應(yīng)手,大大提高工作效率。
到此這篇關(guān)于shell編程正則表達(dá)式與文本處理器完全解析的文章就介紹到這了,更多相關(guān)shell正則表達(dá)式與文本處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一鍵配置CentOS iptables防火墻的Shell腳本分享
這篇文章主要介紹了一鍵配置CentOS iptables防火墻Shell腳本分享,可保存到一個(gè)腳本文件中,在新安裝的CentOS系統(tǒng)時(shí)一條命令搞定iptables配置,需要的朋友可以參考下2014-07-07
linux命令行bandit使用練習(xí)實(shí)戰(zhàn)
這篇文章主要為大家介紹了linux命令行bandit使用練習(xí)實(shí)戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Shell腳本實(shí)現(xiàn)復(fù)制文件到多臺(tái)服務(wù)器的代碼分享
這篇文章主要介紹了Shell腳本實(shí)現(xiàn)復(fù)制文件到多臺(tái)服務(wù)器的代碼分享,用在多機(jī)集群環(huán)境中非常方便,需要的朋友可以參考下2014-09-09

