用python3實現linux的sed功能


sed是一個很好的文件處理工具,本身是一個管道命令,主要是以行為單位進行處理,可以將數據行進行替換、刪除、新增、選取等特定工作。現在用python簡單實現sed的主要命令,將old_text替換為new_text,同時將原來的文件備份,原有的文件被修改。

sed.py的內容如下:

 1 import sys
 2 import os
 3 import shutil
 4 
 5 if len(sys.argv) < 4:
 6     sys.exit("usage:sed.py old_text new_text file_name")
 7 
 8 # 假定程序的參數是正確的
 9 # 取參數賦值
10 progran_ame, old_text, new_text, arg_file_name = sys.argv
11 print(progran_ame, old_text, new_text, arg_file_name)
12 
13 if not os.path.exists(arg_file_name):
14     sys.exit("文件%s不存在" % arg_file_name)
15 
16 
17 # 判斷輸入的參數是否為絕對路徑, 如果是相對路徑則取得絕對路徑
18 if os.path.isabs(arg_file_name):
19     src_file = arg_file_name
20 else:
21     src_file = os.path.realpath(arg_file_name)
22 
23 # 將原來的文件重新命名,得到備份文件名
24 src_path_name = os.path.dirname(src_file)
25 src_file_name = os.path.basename(src_file)
26 bak_file_name = os.path.splitext(src_file_name)[0]+'_bak'+os.path.splitext(src_file_name)[1]
27 back_file = src_path_name+os.sep+bak_file_name
28 
29 # 備份文件
30 shutil.copy(src_file, back_file)
31 
32 out_file = open(src_file, 'w', encoding='utf-8')
33 # 對文件的每一行進行遍歷,同時進行替換操作
34 with open(back_file, encoding='utf-8') as f:
35     for line in f:
36         out_file.writelines(line.replace(old_text, new_text))
37 
38 out_file.close()

 

測試

test.txt文件內容如下

bj您好
我是小笨蛋
歡迎你……bj

 

python sed.py bj 北京 test.txt

將test.txt中"bj"替換為"北京"

執行后,生成test_bak.txt文件,內容和test.txt一樣。test.txt中的內容變為

北京您好
我是小笨蛋
歡迎你……北京

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM