首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

配置文件智能備份還原腳本:基於 Sed 的多模式精準編輯工具

     編輯:Java 綜合教學

應用場景:大規模集群配置變更自動化

批量機器服務升級時,需備份配置文件特定行/塊,升級後精準還原。手工操作耗時易錯,本腳本基於 sed 實現:

  • 單行/多行、單塊/多塊精準備份與還原
  • 整文件備份/還原
  • 正則定位插入/刪除/批量插入

配置文件樣例格式

server.config:
ser_max_connection=6000        # 行模式
ser_min_connection=10

ser_time_out=60
ser_time_spent=120

server tcp_nodes{              # 塊模式,以 } 結束
    ser_client_ip=ipv4
    ser_client_len=20*N
    ser_client_syn=yes
    ser_client_ack=yes
}

核心功能實現邏輯

備份模式

backup 'server.config#+srcpattern#=request_src_type#+src_acl'
# +前綴 → 匹配塊(從該行到下一個 })
# =前綴 → 精確匹配鍵值行(鍵名匹配)
# 無前綴 → 行首正則匹配

備份文件標記:+ 開頭=塊、= 開頭=鍵值行、- 開頭=普通行。

還原邏輯

  1. 讀取備份文件每行,解析標記類型
  2. 提取目標內容(塊內容含換行轉義)
  3. 在目標配置文件中查找匹配鍵(塊以首行鍵定位)
  4. 塊替換:刪除舊塊 sed -i 'start,/}/d' → 插入新塊
  5. 鍵值替換:sed -i 'line s/.*/new_value/'
  6. 未找到匹配項記錄錯誤並報告

精準插入

insert 'server.config#def p_r t_default#...#r_ww_switch#xxx=1-2-3'
# 參數:文件#定位行1#定位行2...#待插入行
# 邏輯:按順序匹配定位行,在最後一定位行後插入

批量插入

insall 'server.config#pattern#new_line'
# 所有匹配 pattern 的行後插入 new_line

整文件備份/還原

copy  'main.config#r.config'    # 備份指定文件到 whole 目錄
rcopy 'main.config#r.config'    # 還原並自動備份當前版本(帶時間戳)

腳本架構亮點

特性實現方式
遞歸掃描 multidir() 函數遍歷目錄樹收集所有文件路徑
IFS 分隔符處理 使用 # 作為參數分隔符,支持含空格路徑
sed 進階用法 範圍刪除 start,/}/d、行後插入 line a\content、模式空間多行處理
原子性還原 rcopy 先備份當前文件,還原失敗自動回滾
彩色日誌輸出 \033[31m 紅色錯誤、\033[33m 黃色警告

使用示例速查

# 備份 server.config 中 srcpattern 塊、request_src_type 鍵值、src_acl 塊
./config_tool.sh backup 'server.config#+srcpattern#=request_src_type#+src_acl'

# 還原所有備份
./config_tool.sh restore

# 還原指定文件
./config_tool.sh restore server.config

# 在 def p_r t_default 後插入 xxx=1-2-3
./config_tool.sh insert 'server.config#def p_r t_default#xxx=1-2-3'

# 刪除 r_ww_switch 行
./config_tool.sh delete 'server.config#r_ww_switch'

# 所有含 def p_r t_default 的行後插入
./config_tool.sh insall 'server.config#def p_r t_default#xxx=1-2-3'

# 備份/還原整文件
./config_tool.sh copy 'main.config#r.config'
./config_tool.sh rcopy 'main.config#r.config'

注意:腳本源自真實生產環境通用化改造,未經嚴格測試,生產使用前請在測試環境充分驗證。交流群:63565867。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved