暫時沒有域名怎么做網(wǎng)站博興縣建設局官方網(wǎng)站
鶴壁市浩天電氣有限公司
2026/01/24 14:40:23
暫時沒有域名怎么做網(wǎng)站,博興縣建設局官方網(wǎng)站,好看的html頁面,營銷團隊的建設與管理一、sed 工作流程和基本原理1. sed 的工作模式輸入流 → 模式空間 → 執(zhí)行命令 → 輸出流↑保持空間 (可選)2. 兩個緩沖區(qū)模式空間 (Pattern Space): 當前處理行的緩沖區(qū)保持空間 (Hold Space): 臨時存儲區(qū)#xff0c;用于跨行操作二、完整語法格式# 基本格式
sed [選項] 地址…一、sed 工作流程和基本原理1. sed 的工作模式輸入流 → 模式空間 → 執(zhí)行命令 → 輸出流 ↑ 保持空間 (可選)2. 兩個緩沖區(qū)模式空間 (Pattern Space): 當前處理行的緩沖區(qū)保持空間 (Hold Space): 臨時存儲區(qū)用于跨行操作二、完整語法格式# 基本格式 sed [選項] 地址范圍 命令 [參數(shù)] 文件 sed [選項] -f 腳本文件 文件選項詳解選項GNU sedBSD sed說明-n??靜默模式不自動打印模式空間-e??指定多個編輯命令-f??從文件讀取腳本-i[后綴]??原地編輯可選備份后綴-r/-E-r-E使用擴展正則-l??設置行長度--posix??遵循 POSIX 標準-u??無緩沖 I/O-z??用 NUL 字符分隔行三、地址定位尋址1. 單地址# 行號 sed 5命令 file # 第5行 sed $命令 file # 最后一行 # 正則表達式 sed /pattern/命令 file # 匹配pattern的行 sed /^#/命令 file # 以#開頭的行2. 地址范圍# 行號范圍 sed 10,20命令 file # 第10-20行 sed 5,3命令 file # 第5行及后面3行 sed 2,~2命令 file # 第2行開始每隔2行 (GNU特有) # 正則范圍 sed /start/,/end/命令 file sed /^BEGIN$/,/^END$/命令 file # 混合范圍 sed 5,/pattern/命令 file # 第5行到匹配行 sed /pattern/,10命令 file # 匹配行到第10行3. 步進地址 (GNU特有)sed 1~2命令 file # 奇數(shù)行 (1,3,5...) sed 2~3命令 file # 從第2行開始每隔3行 (2,5,8...) sed 0~2命令 file # 偶數(shù)行 (0表示第一行匹配)4. 地址否定sed 地址!命令 file # 不匹配地址的行執(zhí)行命令 sed 1,5!d file # 刪除除1-5行外的所有行 sed /^#/!p file # 打印非注釋行四、完整命令集1. 文本轉(zhuǎn)換命令s- 替換# 語法: s/正則/替換/標志 sed s/old/new/ # 每行第一個 sed s/old/new/g # 全局替換 sed s/old/new/2 # 每行第2次出現(xiàn) sed s/old/new/2g # 從第2次開始全局 sed s/old/new/p # 打印替換的行 sed s/old/new/w 文件 # 寫入文件 sed s/old/new/i # 忽略大小寫 (GNU) sed s/old/new/I # 忽略大小寫 (BSD) sed s/old/new/M # 多行模式 (GNU) sed s/old/new/e # 執(zhí)行替換內(nèi)容作為命令 (GNU危險!)y- 字符轉(zhuǎn)換 (類似tr)# 語法: y/源字符集/目標字符集/ sed y/abc/ABC/ # a→A, b→B, c→C sed y/a-z/A-Z/ # 小寫轉(zhuǎn)大寫2. 行操作命令d- 刪除sed 3d file # 刪除第3行 sed /pattern/d # 刪除匹配行 sed 1,5d # 刪除1-5行D- 刪除模式空間的第一行# 刪除直到第一個換行符 sed N;D # 保留最后一行p- 打印sed -n /pattern/p # 只打印匹配行 sed 1,5p # 打印1-5行(會重復)P- 打印模式空間的第一行sed -n N;P # 打印每對行的第一行n- 讀取下一行sed n;s/old/new/ # 處理偶數(shù)行 sed /pattern/{n;s/old/new/} # 匹配行的下一行N- 追加下一行到模式空間sed N;s/
/ / # 合并相鄰兩行 sed N;/foo
bar/d # 刪除包含foo和bar的相鄰行a- 追加文本 (行后)sed 3a新文本 # 第3行后追加 sed /pattern/a新文本 # 匹配行后追加 # 多行文本 sed 2a 第一行 第二行 第三行 filei- 插入文本 (行前)sed 3i新文本 # 第3行前插入c- 替換整行sed 5c新行內(nèi)容 # 替換第5行 sed /pattern/c新行內(nèi)容 # 替換匹配行3. 文件操作命令r- 讀取文件內(nèi)容sed 3r 其他文件 # 在第3行后插入文件內(nèi)容 sed /pattern/r 文件 # 在匹配行后插入w- 寫入文件sed /pattern/w 輸出文件 # 將匹配行寫入文件 sed 1,10w 前十行.txt # 寫入1-10行4. 流控制命令b- 分支跳轉(zhuǎn)# 語法: [地址]b[標簽] sed s/foo/bar/; t; s/baz/qux/ # 如果s成功則跳轉(zhuǎn) sed /pattern/b end; s/old/new/; :endt- 測試跳轉(zhuǎn) (如果s///成功)sed s/foo/bar/; t; s/baz/qux/ # 如果foo替換成功跳過第二個替換T- 測試跳轉(zhuǎn) (如果s///失敗) (GNU)sed s/foo/bar/; T error; d; :error # 如果替換失敗跳轉(zhuǎn):- 定義標簽sed :mylabel; commands; b mylabelq/Q- 退出sed 5q # 處理到第5行退出 sed /pattern/q # 遇到匹配行退出 sed /pattern/Q # GNU: 不打印當前行退出5. 緩沖區(qū)操作命令 (保持空間)h/H- 復制/追加到保持空間h # 復制模式空間→保持空間(覆蓋) H # 追加模式空間→保持空間(加換行符)g/G- 復制/追加到模式空間g # 復制保持空間→模式空間(覆蓋) G # 追加保持空間→模式空間(加換行符)x- 交換兩個空間x # 交換模式空間和保持空間6. 其他命令- 打印行號sed -n /pattern/ # 打印匹配行的行號 sed file | sed N;s/
/: / # 添加行號前綴l- 顯示不可見字符sed -n l file # 顯示控制字符為
, 等v- 版本檢查 (GNU)sed v 4.0 # 需要GNU sed 4.0五、高級技巧和模式1. 分支和標簽 (實現(xiàn)循環(huán))# 移除多行注釋 /* ... */ sed //*/{:a; N; //*.**//!ba; s//*.**///g} file # 刪除HTML標簽 sed -r :a; s/[^]*//g; // {N; ba} file2. 多行模式處理# 合并連續(xù)空白行為一行 sed /^$/{N; /^
$/D} file # 段落格式化 sed /^$/!{H;d;}; x; s/
/ /g; s/^ //; p; x; d file3. 模擬其他命令# 模擬 head -n 10 sed 10q file # 模擬 tail -n 10 sed -e :a -e $q;N;11,$D;ba file # 模擬 tac (反轉(zhuǎn)行序) sed 1!G;h;$!d file # 模擬 grep -n sed -n /pattern/{;p} | sed N;s/
/:/ # 模擬 uniq sed $!N; /^(.*)
1$/!P; D file4. 數(shù)值計算和操作# 行號計算 sed file | sed N; s/^/0000/; s/^0*([0-9]{4,})
/1 / # 遞增數(shù)字 sed s/[0-9]//g; s/^/0/; s/0/1/g; s/1/2/g; s/2/3/g; s/3/4/g; s/4/5/g; s/5/6/g; s/6/7/g; s/7/8/g; s/8/9/g; s/9//g; s/^0//; s/$// file5. CSV/TSV處理# 交換第2和第3列 (逗號分隔) sed -r s/^([^,]*),([^,]*),([^,]*)/1,3,2/ # 轉(zhuǎn)置CSV (簡單情況) sed -r :a; N; $!ba; s/,/
/g; s/
/,/; P; D6. 遞歸處理# 替換嵌套括號內(nèi)容 sed :a; s/(([^()]*))/1/g; ta7. 復雜文本重組# 格式化數(shù)字 (每三位加逗號) sed -r :a; s/([0-9])([0-9]{3})($|[^0-9])/1,23/; ta六、sed腳本編程1. 腳本文件格式# script.sed #!/usr/bin/sed -f # 注釋 /pattern/ { s/old/new/ p d }2. 條件執(zhí)行# if-then-else 模擬 sed /pattern/{s/old/new/; b end}; s/other/changed/; :end3. 循環(huán)結(jié)構# while循環(huán)模擬 sed :loop; /條件/ {命令; b loop}七、性能優(yōu)化技巧1. 減少模式空間操作# 差: 多次替換 sed -e s/a/A/ -e s/b/B/ -e s/c/C/ file # 好: 一次替換多個 sed y/abc/ABC/ file # 更好: 使用字符類 sed s/[abc]/U/g file2. 提前退出# 找到目標后停止處理 sed /target/{p; q} 大文件3. 批量操作# 處理多個文件時 sed -i.bak s/old/new/g *.txt4. 避免回溯# 差: 貪婪匹配 sed s/.*(target).*/1/ # 好: 非貪婪匹配 (GNU sed) sed -r s/.*?(target).*/1/八、POSIX與GNU/BSD差異特性POSIXGNU sedBSD sed擴展正則不支持-r-E大小寫忽略s///i(未定義)??s,w類不支持??u,L轉(zhuǎn)換不支持??原地編輯未定義-i-i 行尋址基本擴展(~,)基本-z選項不支持??九、實際案例庫1. 日志處理# 提取時間范圍內(nèi)的日志 sed -n /2024-01-01 09:/,/2024-01-01 10:/p logfile # 刪除ANSI顏色代碼 sed s/x1B[[0-9;]*[JKmsu]//g file # 統(tǒng)計IP出現(xiàn)次數(shù) sed -n s/.*([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}).*/1/p | sort | uniq -c2. 代碼處理# 縮進轉(zhuǎn)換 (2空格→4空格) sed s/^ / /g file.py # 移除尾隨空格 sed s/[[:space:]]*$// file # 標準化換行符 sed s/
$// file # CRLF→LF3. 數(shù)據(jù)處理# CSV轉(zhuǎn)Markdown表格 sed 1s/^/| /; 1s/,/ | /g; 1s/$/ |/; 2s/.*/|---|---|/; 3,$s/^/| /; 3,$s/,/ | /g; 3,$s/$/ |/ # JSON美化 (簡單) sed s/{/{
/g; s/,/,
/g; s/}/
}/g4. 系統(tǒng)管理# 批量重命名 ls *.txt | sed s/(.*).txt/mv 1.md/ | sh # 生成配置文件 seq 1 10 | sed s/^/server 192.168.1./; s/$/ weight1;/ # 監(jiān)控日志變化 tail -f logfile | sed /ERROR/,5p十、調(diào)試和錯誤處理1. 調(diào)試技巧# 顯示執(zhí)行過程 (GNU) sed --debug script.sed file # 逐步調(diào)試 echo test | sed s/t/T/; l; s/e/E/; l # 查看模式空間 sed -n l file | cat -A2. 常見錯誤# 錯誤: 未轉(zhuǎn)義分隔符 sed s/http://example.com// # 錯誤 sed s|http://example.com/|| # 正確 # 錯誤: 貪婪匹配 sed s/.*foo/bar/ # 可能非預期 sed s/[^f]*foo/bar/ # 更好 # 錯誤: 原地編輯權限 sed -i s/old/new/ /etc/passwd # 需要sudo3. 安全注意事項# 危險: e命令執(zhí)行外部命令 sed s/.*/;/e file # 可能執(zhí)行惡意代碼 # 危險: 處理不可信輸入 cat user_input | sed s/.*// # 可能包含惡意模式 # 安全實踐 sed s/[]/\/g file # 轉(zhuǎn)義特殊字符十一、sed極限和替代方案sed適合的場景簡單文本替換行級別的過濾流式處理大文件與管道配合的簡單轉(zhuǎn)換考慮其他工具的場景復雜文本結(jié)構 → awk, perl, python需要數(shù)據(jù)結(jié)構 → awk, perl大量字符串操作 → perl, python需要GUI交互 → 文本編輯器這個指南幾乎涵蓋了sed的所有功能。sed的強大之處在于它的簡潔和流式處理能力但對于非常復雜的文本處理建議結(jié)合awk或其他腳本語言使用。記住保持sed腳本簡單可讀復雜的邏輯可能更適合用其他工具實現(xiàn)。